diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4c2a488e6e1..e2c0b4f91e2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -27,3 +27,4 @@ /src/botservice/ @swagatmishra2007 /src/storage-preview/ @williexu + diff --git a/scripts/ci/test_static.sh b/scripts/ci/test_static.sh index 528544e6221..4f463fff6d6 100755 --- a/scripts/ci/test_static.sh +++ b/scripts/ci/test_static.sh @@ -9,12 +9,12 @@ PYLINT_EXCLUDES=$(echo "$AZURE_SDK_AUTOGEN_FILES" | sed -e s=\./src/=src/=g -e ' # Run pylint/flake8 on extensions echo "Running pylint on extensions..." -pylint ./src/rdbms/azext_rdbms/ --ignore=$PYLINT_EXCLUDES --ignore-patterns=test_* --rcfile=./pylintrc -j $proc_number +pylint ./src/rdbms/azext_rdbms/ --ignore=$PYLINT_EXCLUDES,vendored_sdks --ignore-patterns=test_* --rcfile=./pylintrc -j $proc_number echo "Pylint OK." echo "Running flake8 on extensions..." -flake8 --statistics --exclude=$FLAKE8_EXCLUDES --append-config=./.flake8 ./src/*/azext_*/ +flake8 --statistics --exclude=$FLAKE8_EXCLUDES,vendored_sdks --append-config=./.flake8 ./src/*/azext_*/ echo "Flake8 OK." # Run pylint/flake8 on CI files @@ -23,4 +23,4 @@ flake8 --append-config=./.flake8 ./scripts/ci/*.py # Other static checks python ./scripts/ci/verify_codeowners.py -python ./scripts/ci/verify_license.py +python ./scripts/ci/verify_license.py 'src/storage-preview/azext_storage_preview/vendored_sdks' diff --git a/scripts/ci/verify_license.py b/scripts/ci/verify_license.py index aa5f47b5c0d..65bbab7b130 100644 --- a/scripts/ci/verify_license.py +++ b/scripts/ci/verify_license.py @@ -7,6 +7,7 @@ import os import sys +import argparse from util import get_repo_root @@ -31,12 +32,14 @@ """ -def main(): - env_path = os.path.join(REPO_ROOT, 'env') +def main(args): + excluded_paths = args.excluded_paths + excluded_paths.append('env') + excluded_paths = tuple([os.path.join(REPO_ROOT, relative_path) for relative_path in excluded_paths]) files_without_header = [] for current_dir, _, files in os.walk(get_repo_root()): - if current_dir.startswith(env_path): + if current_dir.startswith(excluded_paths): continue file_itr = (os.path.join(current_dir, p) for p in files if p.endswith('.py')) for python_file in file_itr: @@ -52,4 +55,6 @@ def main(): if __name__ == '__main__': - main() + parser = argparse.ArgumentParser() + parser.add_argument('excluded_paths', nargs='*') + main(parser.parse_args()) diff --git a/src/index.json b/src/index.json index a5dd3e86bd8..b4c788d6f06 100644 --- a/src/index.json +++ b/src/index.json @@ -824,6 +824,53 @@ "version": "0.0.1" } } + ], + "storage-preview": [ + { + "filename": "storage_preview-0.1.0-py2.py3-none-any.whl", + "sha256Digest": "36768962d09c65b9668581f5bc01f1ad252acf832f22afdb04ed00c3333379cc", + "downloadUrl": "https://azurecliprod.blob.core.windows.net/cli-extensions/storage_preview-0.1.0-py2.py3-none-any.whl", + "metadata": { + "azext.isPreview": true, + "azext.minCliCoreVersion": "2.0.32.dev0", + "classifiers": [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "License :: OSI Approved :: MIT License" + ], + "extensions": { + "python.details": { + "contacts": [ + { + "email": "azpycli@microsoft.com", + "name": "Microsoft Corporation", + "role": "author" + } + ], + "document_names": { + "description": "DESCRIPTION.rst" + }, + "project_urls": { + "Home": "https://github.com/Azure/azure-cli-extensions" + } + } + }, + "generator": "bdist_wheel (0.29.0)", + "license": "MIT", + "metadata_version": "2.0", + "name": "storage-preview", + "summary": "Provides a preview for upcoming storage features.", + "version": "0.1.0" + } + } ] } } \ No newline at end of file diff --git a/src/storage-preview/azext_storage_preview/__init__.py b/src/storage-preview/azext_storage_preview/__init__.py index 910777766b8..7ae28d3456b 100644 --- a/src/storage-preview/azext_storage_preview/__init__.py +++ b/src/storage-preview/azext_storage_preview/__init__.py @@ -4,19 +4,22 @@ # -------------------------------------------------------------------------------------------- from azure.cli.core import AzCommandsLoader -from azure.cli.core.profiles import ResourceType +from azure.cli.core.profiles import ResourceType, register_resource_type from azure.cli.core.commands import AzCommandGroup, AzArgumentContext import azext_storage_preview._help # pylint: disable=unused-import +from .profiles import CUSTOM_DATA_STORAGE class StorageCommandsLoader(AzCommandsLoader): def __init__(self, cli_ctx=None): from azure.cli.core.commands import CliCommandType + register_resource_type('latest', CUSTOM_DATA_STORAGE, '2017-11-09') storage_custom = CliCommandType(operations_tmpl='azext_storage_preview.custom#{}') + super(StorageCommandsLoader, self).__init__(cli_ctx=cli_ctx, - resource_type=ResourceType.DATA_STORAGE, + resource_type=CUSTOM_DATA_STORAGE, custom_command_type=storage_custom, command_group_cls=StorageCommandGroup, argument_context_cls=StorageArgumentContext) @@ -127,7 +130,7 @@ def register_common_storage_account_options(self): class StorageCommandGroup(AzCommandGroup): - def storage_command(self, name, method_name=None, command_type=None, **kwargs): + def storage_command(self, name, method_name=None, command_type=None, oauth=False, **kwargs): """ Registers an Azure CLI Storage Data Plane command. These commands always include the four parameters which can be used to obtain a storage client: account-name, account-key, connection-string, and sas-token. """ if command_type: @@ -135,22 +138,58 @@ def storage_command(self, name, method_name=None, command_type=None, **kwargs): else: command_name = self.command(name, method_name, **kwargs) self._register_data_plane_account_arguments(command_name) + if oauth: + self._register_data_plane_oauth_arguments(command_name) + + def storage_command_oauth(self, *args, **kwargs): + _merge_new_exception_handler(kwargs, self.get_handler_suppress_403()) + self.storage_command(*args, oauth=True, **kwargs) - def storage_custom_command(self, name, method_name, **kwargs): + def storage_custom_command(self, name, method_name, oauth=False, **kwargs): command_name = self.custom_command(name, method_name, **kwargs) self._register_data_plane_account_arguments(command_name) + if oauth: + self._register_data_plane_oauth_arguments(command_name) - def get_handler_suppress_404(self): + def storage_custom_command_oauth(self, *args, **kwargs): + _merge_new_exception_handler(kwargs, self.get_handler_suppress_403()) + self.storage_custom_command(*args, oauth=True, **kwargs) - # pylint: disable=inconsistent-return-statements + def get_handler_suppress_404(self): def handler(ex): from azure.cli.core.profiles import get_sdk t_error = get_sdk(self.command_loader.cli_ctx, - ResourceType.DATA_STORAGE, + CUSTOM_DATA_STORAGE, 'common._error#AzureMissingResourceHttpError') if isinstance(ex, t_error): - return None + return + raise ex + + return handler + + def get_handler_suppress_403(self): + def handler(ex): + from azure.cli.core.profiles import get_sdk + from knack.log import get_logger + + logger = get_logger(__name__) + t_error = get_sdk(self.command_loader.cli_ctx, + CUSTOM_DATA_STORAGE, + 'common._error#AzureHttpError') + if isinstance(ex, t_error) and ex.status_code == 403: + message = """ +You do not have the required permissions needed to perform this operation. +Depending on your operation, you may need to be assigned one of the following roles: + "Storage Blob Data Contributor (Preview)" + "Storage Blob Data Reader (Preview)" + "Storage Queue Data Contributor (Preview)" + "Storage Queue Data Reader (Preview)" + +If you want to use the old authentication method and allow querying for the right account key, please use the "--auth-mode" parameter and "key" value. + """ + logger.error(message) + return raise ex return handler @@ -183,5 +222,30 @@ def _register_data_plane_account_arguments(self, command_name): help='A Shared Access Signature (SAS). Must be used in conjunction with storage account ' 'name. Environment variable: AZURE_STORAGE_SAS_TOKEN') + def _register_data_plane_oauth_arguments(self, command_name): + from azure.cli.core.commands.parameters import get_enum_type + + # workaround to allow use of AzArgumentContext.extra() + self.command_loader.command_name = command_name + with self.command_loader.argument_context(command_name) as c: + c.extra('auth_mode', arg_type=get_enum_type(['login', 'key']), + help='The mode in which to run the command. "login" mode will directly use your login credentials ' + 'for the authentication. The legacy "key" mode will attempt to query for ' + 'an account key if no authentication parameters for the account are provided. ' + 'Environment variable: AZURE_STORAGE_AUTH_MODE') + + +def _merge_new_exception_handler(kwargs, handler): + if kwargs.get('exception_handler'): + def new_handler(ex): + first = kwargs['exception_handler'] + try: + first(ex) + except Exception as raised_ex: # pylint: disable=broad-except + handler(raised_ex) + kwargs['exception_handler'] = new_handler + else: + kwargs['exception_handler'] = handler + COMMAND_LOADER_CLS = StorageCommandsLoader diff --git a/src/storage-preview/azext_storage_preview/_client_factory.py b/src/storage-preview/azext_storage_preview/_client_factory.py index 87a4f1f274a..849babefca2 100644 --- a/src/storage-preview/azext_storage_preview/_client_factory.py +++ b/src/storage-preview/azext_storage_preview/_client_factory.py @@ -3,10 +3,13 @@ # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- -from azure.cli.core.commands.client_factory import get_mgmt_service_client, get_data_service_client +from azure.cli.core.commands.client_factory import get_mgmt_service_client, _get_add_headers_callback from azure.cli.core.profiles import ResourceType, get_sdk +from knack.util import CLIError +from knack.log import get_logger from .sdkutil import get_table_data_type +from .profiles import CUSTOM_DATA_STORAGE NO_CREDENTIALS_ERROR_MESSAGE = """ No credentials specified to access storage service. Please provide any of the following: @@ -18,26 +21,56 @@ option or AZURE_STORAGE_ACCOUNT environment variable) """ +logger = get_logger(__name__) + + +# edited from azure.cli.core.commands.client_factory +def get_data_service_client(cli_ctx, service_type, account_name, account_key, connection_string=None, + sas_token=None, socket_timeout=None, token_credential=None, endpoint_suffix=None): + logger.debug('Getting data service client service_type=%s', service_type.__name__) + try: + client_kwargs = {'account_name': account_name, + 'account_key': account_key, + 'connection_string': connection_string, + 'sas_token': sas_token} + if socket_timeout: + client_kwargs['socket_timeout'] = socket_timeout + if token_credential: + client_kwargs['token_credential'] = token_credential + if endpoint_suffix: + client_kwargs['endpoint_suffix'] = endpoint_suffix + client = service_type(**client_kwargs) + except ValueError as exc: + _ERROR_STORAGE_MISSING_INFO = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, + 'common._error#_ERROR_STORAGE_MISSING_INFO') + if _ERROR_STORAGE_MISSING_INFO in str(exc): + raise ValueError(exc) + else: + raise CLIError('Unable to obtain data client. Check your connection parameters.') + # TODO: enable Fiddler + client.request_callback = _get_add_headers_callback(cli_ctx) + return client + def get_storage_data_service_client(cli_ctx, service, name=None, key=None, connection_string=None, sas_token=None, - socket_timeout=None): + socket_timeout=None, token_credential=None): return get_data_service_client(cli_ctx, service, name, key, connection_string, sas_token, socket_timeout=socket_timeout, + token_credential=token_credential, endpoint_suffix=cli_ctx.cloud.suffixes.storage_endpoint) def generic_data_service_factory(cli_ctx, service, name=None, key=None, connection_string=None, sas_token=None, - socket_timeout=None): + socket_timeout=None, token_credential=None): try: return get_storage_data_service_client(cli_ctx, service, name, key, connection_string, sas_token, - socket_timeout) + socket_timeout, token_credential) except ValueError as val_exception: - _ERROR_STORAGE_MISSING_INFO = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, + _ERROR_STORAGE_MISSING_INFO = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'common._error#_ERROR_STORAGE_MISSING_INFO') message = str(val_exception) if message == _ERROR_STORAGE_MISSING_INFO: message = NO_CREDENTIALS_ERROR_MESSAGE - from knack.util import CLIError raise CLIError(message) @@ -46,7 +79,7 @@ def storage_client_factory(cli_ctx, **_): def file_data_service_factory(cli_ctx, kwargs): - t_file_svc = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'file#FileService') + t_file_svc = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'file#FileService') return generic_data_service_factory(cli_ctx, t_file_svc, kwargs.pop('account_name', None), kwargs.pop('account_key', None), connection_string=kwargs.pop('connection_string', None), @@ -54,7 +87,7 @@ def file_data_service_factory(cli_ctx, kwargs): def page_blob_service_factory(cli_ctx, kwargs): - t_page_blob_service = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'blob.pageblobservice#PageBlobService') + t_page_blob_service = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'blob.pageblobservice#PageBlobService') return generic_data_service_factory(cli_ctx, t_page_blob_service, kwargs.pop('account_name', None), kwargs.pop('account_key', None), connection_string=kwargs.pop('connection_string', None), @@ -70,7 +103,8 @@ def blob_data_service_factory(cli_ctx, kwargs): kwargs.pop('account_key', None), connection_string=kwargs.pop('connection_string', None), sas_token=kwargs.pop('sas_token', None), - socket_timeout=kwargs.pop('socket_timeout', None)) + socket_timeout=kwargs.pop('socket_timeout', None), + token_credential=kwargs.pop('token_credential', None)) def table_data_service_factory(cli_ctx, kwargs): @@ -83,17 +117,18 @@ def table_data_service_factory(cli_ctx, kwargs): def queue_data_service_factory(cli_ctx, kwargs): - t_queue_service = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'queue#QueueService') + t_queue_service = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'queue#QueueService') return generic_data_service_factory( cli_ctx, t_queue_service, kwargs.pop('account_name', None), kwargs.pop('account_key', None), connection_string=kwargs.pop('connection_string', None), - sas_token=kwargs.pop('sas_token', None)) + sas_token=kwargs.pop('sas_token', None), + token_credential=kwargs.pop('token_credential', None)) def cloud_storage_account_service_factory(cli_ctx, kwargs): - t_cloud_storage_account = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'common#CloudStorageAccount') + t_cloud_storage_account = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'common#CloudStorageAccount') account_name = kwargs.pop('account_name', None) account_key = kwargs.pop('account_key', None) sas_token = kwargs.pop('sas_token', None) @@ -105,7 +140,7 @@ def multi_service_properties_factory(cli_ctx, kwargs): """Create multiple data services properties instance based on the services option""" from .services_wrapper import ServiceProperties - t_base_blob_service, t_file_service, t_queue_service, = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, + t_base_blob_service, t_file_service, t_queue_service, = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'blob.baseblobservice#BaseBlobService', 'file#FileService', 'queue#QueueService') diff --git a/src/storage-preview/azext_storage_preview/_format.py b/src/storage-preview/azext_storage_preview/_format.py index 0a4cd8f40a9..908bb395e65 100644 --- a/src/storage-preview/azext_storage_preview/_format.py +++ b/src/storage-preview/azext_storage_preview/_format.py @@ -3,7 +3,8 @@ # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- -from azure.cli.core.profiles import get_sdk, ResourceType +from azure.cli.core.profiles import get_sdk +from .profiles import CUSTOM_DATA_STORAGE def build_table_output(result, projection): @@ -134,7 +135,7 @@ def transform_file_directory_result(cli_ctx): list. """ def transformer(result): - t_file, t_dir = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'File', 'Directory', mod='file.models') + t_file, t_dir = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'File', 'Directory', mod='file.models') return_list = [] for each in result: if isinstance(each, t_file): diff --git a/src/storage-preview/azext_storage_preview/_validators.py b/src/storage-preview/azext_storage_preview/_validators.py index 650e8e050df..5fd4dd94ea3 100644 --- a/src/storage-preview/azext_storage_preview/_validators.py +++ b/src/storage-preview/azext_storage_preview/_validators.py @@ -4,7 +4,6 @@ # -------------------------------------------------------------------------------------------- # pylint: disable=protected-access - from azure.cli.core.commands.client_factory import get_mgmt_service_client from azure.cli.core.commands.validators import validate_key_value_pairs from azure.cli.core.profiles import ResourceType, get_sdk @@ -13,6 +12,7 @@ from .util import glob_files_locally, guess_content_type from .sdkutil import get_table_data_type from .url_quote_util import encode_for_url +from .oauth_token_util import TokenUpdater storage_account_key_options = {'primary': 'key1', 'secondary': 'key2'} @@ -43,6 +43,21 @@ def _query_account_key(cli_ctx, account_name): raise ValueError("Storage account '{}' not found.".format(account_name)) +def _create_token_credential(cli_ctx): + from knack.cli import EVENT_CLI_POST_EXECUTE + from .profiles import CUSTOM_DATA_STORAGE + + TokenCredential = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'common#TokenCredential') + + token_credential = TokenCredential(None) + updater = TokenUpdater(token_credential, cli_ctx) + + def _cancel_timer_event_handler(_, **__): + updater.cancel() + cli_ctx.register_event(EVENT_CLI_POST_EXECUTE, _cancel_timer_event_handler) + return token_credential + + # region PARAMETER VALIDATORS def validate_table_payload_format(cmd, namespace): @@ -69,6 +84,27 @@ def validate_client_parameters(cmd, namespace): def get_config_value(section, key, default): return cmd.cli_ctx.config.get(section, key, default) + if hasattr(n, 'auth_mode'): + auth_mode = n.auth_mode or get_config_value('storage', 'auth_mode', None) + del n.auth_mode + if not n.account_name: + n.account_name = get_config_value('storage', 'account', None) + if auth_mode == 'login': + n.token_credential = _create_token_credential(cmd.cli_ctx) + + # give warning if there are account key args being ignored + account_key_args = [n.account_key and "--account-key", n.sas_token and "--sas-token", + n.connection_string and "--connection-string"] + account_key_args = [arg for arg in account_key_args if arg] + + if account_key_args: + from knack.log import get_logger + + logger = get_logger(__name__) + logger.warning('In "login" auth mode, the following arguments are ignored: %s', + ' ,'.join(account_key_args)) + return + if not n.connection_string: n.connection_string = get_config_value('storage', 'connection_string', None) diff --git a/src/storage-preview/azext_storage_preview/azext_metadata.json b/src/storage-preview/azext_storage_preview/azext_metadata.json index 391858872b6..3a32f9f753f 100644 --- a/src/storage-preview/azext_storage_preview/azext_metadata.json +++ b/src/storage-preview/azext_storage_preview/azext_metadata.json @@ -1,4 +1,4 @@ { - "azext.minCliCoreVersion": "2.0.32", + "azext.minCliCoreVersion": "2.0.32.dev0", "azext.isPreview": true } \ No newline at end of file diff --git a/src/storage-preview/azext_storage_preview/commands.py b/src/storage-preview/azext_storage_preview/commands.py index 49442aba2e4..9dc997bd307 100644 --- a/src/storage-preview/azext_storage_preview/commands.py +++ b/src/storage-preview/azext_storage_preview/commands.py @@ -11,6 +11,7 @@ cloud_storage_account_service_factory, multi_service_properties_factory) from .sdkutil import cosmosdb_table_exists +from .profiles import CUSTOM_DATA_STORAGE def load_command_table(self, _): # pylint: disable=too-many-locals, too-many-statements @@ -29,7 +30,7 @@ def load_command_table(self, _): # pylint: disable=too-many-locals, too-many-st client_factory=cloud_storage_account_service_factory ) - def get_custom_sdk(custom_module, client_factory, resource_type=ResourceType.DATA_STORAGE): + def get_custom_sdk(custom_module, client_factory, resource_type=CUSTOM_DATA_STORAGE): """Returns a CliCommandType instance with specified operation template based on the given custom module name. This is useful when the command is not defined in the default 'custom' module but instead in a module under 'operations' package.""" @@ -78,12 +79,12 @@ def get_custom_sdk(custom_module, client_factory, resource_type=ResourceType.DAT block_blob_sdk = CliCommandType( operations_tmpl='azure.multiapi.storage.blob.blockblobservice#BlockBlobService.{}', client_factory=blob_data_service_factory, - resource_type=ResourceType.DATA_STORAGE) + resource_type=CUSTOM_DATA_STORAGE) base_blob_sdk = CliCommandType( operations_tmpl='azure.multiapi.storage.blob.baseblobservice#BaseBlobService.{}', client_factory=blob_data_service_factory, - resource_type=ResourceType.DATA_STORAGE) + resource_type=CUSTOM_DATA_STORAGE) with self.command_group('storage blob', command_type=block_blob_sdk, custom_command_type=get_custom_sdk('blob', blob_data_service_factory)) as g: @@ -91,65 +92,66 @@ def get_custom_sdk(custom_module, client_factory, resource_type=ResourceType.DAT from ._transformers import (transform_storage_list_output, transform_url, create_boolean_result_output_transformer) - g.storage_command('list', 'list_blobs', transform=transform_storage_list_output, - table_transformer=transform_blob_output) - g.storage_command('download', 'get_blob_to_path') - g.storage_command('generate-sas', 'generate_blob_shared_access_signature') - g.storage_command('url', 'make_blob_url', transform=transform_url) - g.storage_command('snapshot', 'snapshot_blob') - g.storage_command('show', 'get_blob_properties', table_transformer=transform_blob_output, - exception_handler=g.get_handler_suppress_404()) - g.storage_command('update', 'set_blob_properties') - g.storage_command('exists', 'exists', transform=create_boolean_result_output_transformer('exists')) - g.storage_command('delete', 'delete_blob', transform=create_boolean_result_output_transformer('deleted'), - table_transformer=transform_boolean_for_table) - g.storage_command('undelete', 'undelete_blob', transform=create_boolean_result_output_transformer('undeleted'), - table_transformer=transform_boolean_for_table, min_api='2017-07-29') - - g.storage_custom_command('set-tier', 'set_blob_tier') - g.storage_custom_command('upload', 'upload_blob', - doc_string_source='blob#BlockBlobService.create_blob_from_path') - g.storage_custom_command('upload-batch', 'storage_blob_upload_batch') - g.storage_custom_command('download-batch', 'storage_blob_download_batch') - g.storage_custom_command('delete-batch', 'storage_blob_delete_batch') - - g.storage_command('metadata show', 'get_blob_metadata', exception_handler=g.get_handler_suppress_404()) - g.storage_command('metadata update', 'set_blob_metadata') - - g.storage_command('lease acquire', 'acquire_blob_lease') - g.storage_command('lease renew', 'renew_blob_lease') - g.storage_command('lease release', 'release_blob_lease') - g.storage_command('lease change', 'change_blob_lease') - g.storage_command('lease break', 'break_blob_lease') - - g.storage_command('copy start', 'copy_blob') - g.storage_command('copy cancel', 'abort_copy_blob') - g.storage_custom_command('copy start-batch', 'storage_blob_copy_batch') + g.storage_command_oauth('list', 'list_blobs', transform=transform_storage_list_output, + table_transformer=transform_blob_output) + g.storage_command_oauth('download', 'get_blob_to_path') + g.storage_command_oauth('generate-sas', 'generate_blob_shared_access_signature') + g.storage_command_oauth('url', 'make_blob_url', transform=transform_url) + g.storage_command_oauth('snapshot', 'snapshot_blob') + g.storage_command_oauth('show', 'get_blob_properties', table_transformer=transform_blob_output, + exception_handler=g.get_handler_suppress_404()) + g.storage_command_oauth('update', 'set_blob_properties') + g.storage_command_oauth('exists', 'exists', transform=create_boolean_result_output_transformer('exists')) + g.storage_command_oauth('delete', 'delete_blob', transform=create_boolean_result_output_transformer('deleted'), + table_transformer=transform_boolean_for_table) + g.storage_command_oauth('undelete', 'undelete_blob', + transform=create_boolean_result_output_transformer('undeleted'), + table_transformer=transform_boolean_for_table, min_api='2017-07-29') + + g.storage_custom_command_oauth('set-tier', 'set_blob_tier') + g.storage_custom_command_oauth('upload', 'upload_blob', + doc_string_source='blob#BlockBlobService.create_blob_from_path') + g.storage_custom_command_oauth('upload-batch', 'storage_blob_upload_batch') + g.storage_custom_command_oauth('download-batch', 'storage_blob_download_batch') + g.storage_custom_command_oauth('delete-batch', 'storage_blob_delete_batch') + + g.storage_command_oauth('metadata show', 'get_blob_metadata', exception_handler=g.get_handler_suppress_404()) + g.storage_command_oauth('metadata update', 'set_blob_metadata') + + g.storage_command_oauth('lease acquire', 'acquire_blob_lease') + g.storage_command_oauth('lease renew', 'renew_blob_lease') + g.storage_command_oauth('lease release', 'release_blob_lease') + g.storage_command_oauth('lease change', 'change_blob_lease') + g.storage_command_oauth('lease break', 'break_blob_lease') + + g.storage_command_oauth('copy start', 'copy_blob') + g.storage_command_oauth('copy cancel', 'abort_copy_blob') + g.storage_custom_command_oauth('copy start-batch', 'storage_blob_copy_batch') with self.command_group('storage blob incremental-copy', operations_tmpl='azure.multiapi.storage.blob.pageblobservice#PageBlobService.{}', client_factory=page_blob_service_factory, - resource_type=ResourceType.DATA_STORAGE, + resource_type=CUSTOM_DATA_STORAGE, min_api='2016-05-31') as g: - g.storage_command('start', 'incremental_copy_blob') + g.storage_command_oauth('start', 'incremental_copy_blob') with self.command_group('storage blob incremental-copy', operations_tmpl='azure.multiapi.storage.blob.blockblobservice#BlockBlobService.{}', client_factory=page_blob_service_factory, - resource_type=ResourceType.DATA_STORAGE, + resource_type=CUSTOM_DATA_STORAGE, min_api='2016-05-31') as g: - g.storage_command('cancel', 'abort_copy_blob') + g.storage_command_oauth('cancel', 'abort_copy_blob') with self.command_group('storage blob service-properties delete-policy', command_type=base_blob_sdk, min_api='2017-07-29', custom_command_type=get_custom_sdk('blob', blob_data_service_factory)) as g: - g.storage_command('show', 'get_blob_service_properties', - transform=lambda x: getattr(x, 'delete_retention_policy', x), - exception_handler=g.get_handler_suppress_404()) - g.storage_custom_command('update', 'set_delete_policy') + g.storage_command_oauth('show', 'get_blob_service_properties', + transform=lambda x: getattr(x, 'delete_retention_policy', x), + exception_handler=g.get_handler_suppress_404()) + g.storage_custom_command_oauth('update', 'set_delete_policy') with self.command_group('storage blob service-properties', command_type=base_blob_sdk) as g: - g.storage_command('show', 'get_blob_service_properties', exception_handler=g.get_handler_suppress_404()) + g.storage_command_oauth('show', 'get_blob_service_properties', exception_handler=g.get_handler_suppress_404()) with self.command_group('storage container', command_type=block_blob_sdk, custom_command_type=get_custom_sdk('acl', blob_data_service_factory)) as g: @@ -157,38 +159,41 @@ def get_custom_sdk(custom_module, client_factory, resource_type=ResourceType.DAT transform_acl_list_output) from ._format import (transform_container_list, transform_boolean_for_table, transform_container_show) - g.storage_command('list', 'list_containers', transform=transform_storage_list_output, - table_transformer=transform_container_list) - g.storage_command('delete', 'delete_container', transform=create_boolean_result_output_transformer('deleted'), - table_transformer=transform_boolean_for_table) - g.storage_command('show', 'get_container_properties', table_transformer=transform_container_show, - exception_handler=g.get_handler_suppress_404()) - g.storage_command('create', 'create_container', transform=create_boolean_result_output_transformer('created'), - table_transformer=transform_boolean_for_table) - g.storage_command('generate-sas', 'generate_container_shared_access_signature') - g.storage_command('exists', 'exists', transform=create_boolean_result_output_transformer('exists'), - table_transformer=transform_boolean_for_table) - g.storage_command('set-permission', 'set_container_acl') - g.storage_command('show-permission', 'get_container_acl', transform=transform_container_permission_output) - g.storage_command('metadata update', 'set_container_metadata') - g.storage_command('metadata show', 'get_container_metadata', exception_handler=g.get_handler_suppress_404()) - - g.storage_command('lease acquire', 'acquire_container_lease') - g.storage_command('lease renew', 'renew_container_lease') - g.storage_command('lease release', 'release_container_lease') - g.storage_command('lease change', 'change_container_lease') - g.storage_command('lease break', 'break_container_lease') - - g.storage_custom_command('policy create', 'create_acl_policy') - g.storage_custom_command('policy delete', 'delete_acl_policy') - g.storage_custom_command('policy update', 'set_acl_policy', min_api='2017-04-17') - g.storage_custom_command('policy show', 'get_acl_policy', exception_handler=g.get_handler_suppress_404()) - g.storage_custom_command('policy list', 'list_acl_policies', table_transformer=transform_acl_list_output) + g.storage_command_oauth('list', 'list_containers', transform=transform_storage_list_output, + table_transformer=transform_container_list) + g.storage_command_oauth('delete', 'delete_container', + transform=create_boolean_result_output_transformer('deleted'), + table_transformer=transform_boolean_for_table) + g.storage_command_oauth('show', 'get_container_properties', table_transformer=transform_container_show, + exception_handler=g.get_handler_suppress_404()) + g.storage_command_oauth('create', 'create_container', + transform=create_boolean_result_output_transformer('created'), + table_transformer=transform_boolean_for_table) + g.storage_command_oauth('generate-sas', 'generate_container_shared_access_signature') + g.storage_command_oauth('exists', 'exists', transform=create_boolean_result_output_transformer('exists'), + table_transformer=transform_boolean_for_table) + g.storage_command_oauth('set-permission', 'set_container_acl') + g.storage_command_oauth('show-permission', 'get_container_acl', transform=transform_container_permission_output) + g.storage_command_oauth('metadata update', 'set_container_metadata') + g.storage_command_oauth('metadata show', 'get_container_metadata', + exception_handler=g.get_handler_suppress_404()) + + g.storage_command_oauth('lease acquire', 'acquire_container_lease') + g.storage_command_oauth('lease renew', 'renew_container_lease') + g.storage_command_oauth('lease release', 'release_container_lease') + g.storage_command_oauth('lease change', 'change_container_lease') + g.storage_command_oauth('lease break', 'break_container_lease') + + g.storage_custom_command_oauth('policy create', 'create_acl_policy') + g.storage_custom_command_oauth('policy delete', 'delete_acl_policy') + g.storage_custom_command_oauth('policy update', 'set_acl_policy', min_api='2017-04-17') + g.storage_custom_command_oauth('policy show', 'get_acl_policy', exception_handler=g.get_handler_suppress_404()) + g.storage_custom_command_oauth('policy list', 'list_acl_policies', table_transformer=transform_acl_list_output) file_sdk = CliCommandType( operations_tmpl='azure.multiapi.storage.file.fileservice#FileService.{}', client_factory=file_data_service_factory, - resource_type=ResourceType.DATA_STORAGE) + resource_type=CUSTOM_DATA_STORAGE) with self.command_group('storage share', command_type=file_sdk, custom_command_type=get_custom_sdk('acl', file_data_service_factory)) as g: @@ -269,42 +274,43 @@ def get_custom_sdk(custom_module, client_factory, resource_type=ResourceType.DAT queue_sdk = CliCommandType(operations_tmpl='azure.multiapi.storage.queue.queueservice#QueueService.{}', client_factory=queue_data_service_factory, - resource_type=ResourceType.DATA_STORAGE) + resource_type=CUSTOM_DATA_STORAGE) with self.command_group('storage queue', queue_sdk, custom_command_type=get_custom_sdk('acl', queue_data_service_factory)) as g: from ._format import transform_boolean_for_table from ._transformers import create_boolean_result_output_transformer - g.storage_command('list', 'list_queues', transform=transform_storage_list_output) - g.storage_command('create', 'create_queue', transform=create_boolean_result_output_transformer('created'), - table_transformer=transform_boolean_for_table) - g.storage_command('delete', 'delete_queue', transform=create_boolean_result_output_transformer('deleted'), - table_transformer=transform_boolean_for_table) - g.storage_command('generate-sas', 'generate_queue_shared_access_signature') - g.storage_command('stats', 'get_queue_service_stats', min_api='2016-05-31') - g.storage_command('exists', 'exists', transform=create_boolean_result_output_transformer('exists')) + g.storage_command_oauth('list', 'list_queues', transform=transform_storage_list_output) + g.storage_command_oauth('create', 'create_queue', transform=create_boolean_result_output_transformer('created'), + table_transformer=transform_boolean_for_table) + g.storage_command_oauth('delete', 'delete_queue', transform=create_boolean_result_output_transformer('deleted'), + table_transformer=transform_boolean_for_table) + g.storage_command_oauth('generate-sas', 'generate_queue_shared_access_signature') + g.storage_command_oauth('stats', 'get_queue_service_stats', min_api='2016-05-31') + g.storage_command_oauth('exists', 'exists', transform=create_boolean_result_output_transformer('exists')) - g.storage_command('metadata show', 'get_queue_metadata', exception_handler=g.get_handler_suppress_404()) - g.storage_command('metadata update', 'set_queue_metadata') + g.storage_command_oauth('metadata show', 'get_queue_metadata', exception_handler=g.get_handler_suppress_404()) + g.storage_command_oauth('metadata update', 'set_queue_metadata') - g.storage_custom_command('policy create', 'create_acl_policy') - g.storage_custom_command('policy delete', 'delete_acl_policy') - g.storage_custom_command('policy show', 'get_acl_policy', exception_handler=g.get_handler_suppress_404()) - g.storage_custom_command('policy list', 'list_acl_policies', table_transformer=transform_acl_list_output) - g.storage_custom_command('policy update', 'set_acl_policy') + g.storage_custom_command_oauth('policy create', 'create_acl_policy') + g.storage_custom_command_oauth('policy delete', 'delete_acl_policy') + g.storage_custom_command_oauth('policy show', 'get_acl_policy', exception_handler=g.get_handler_suppress_404()) + g.storage_custom_command_oauth('policy list', 'list_acl_policies', table_transformer=transform_acl_list_output) + g.storage_custom_command_oauth('policy update', 'set_acl_policy') with self.command_group('storage message', queue_sdk) as g: from ._transformers import create_boolean_result_output_transformer from ._format import transform_message_show - g.storage_command('put', 'put_message') - g.storage_command('get', 'get_messages', table_transformer=transform_message_show) - g.storage_command('peek', 'peek_messages', table_transformer=transform_message_show) - g.storage_command('delete', 'delete_message', transform=create_boolean_result_output_transformer('deleted'), - table_transformer=transform_boolean_for_table) - g.storage_command('clear', 'clear_messages') - g.storage_command('update', 'update_message') + g.storage_command_oauth('put', 'put_message') + g.storage_command_oauth('get', 'get_messages', table_transformer=transform_message_show) + g.storage_command_oauth('peek', 'peek_messages', table_transformer=transform_message_show) + g.storage_command_oauth('delete', 'delete_message', + transform=create_boolean_result_output_transformer('deleted'), + table_transformer=transform_boolean_for_table) + g.storage_command_oauth('clear', 'clear_messages') + g.storage_command_oauth('update', 'update_message') if cosmosdb_table_exists(self.cli_ctx): table_sdk = CliCommandType(operations_tmpl='azure.multiapi.cosmosdb.table.tableservice#TableService.{}', diff --git a/src/storage-preview/azext_storage_preview/oauth_token_util.py b/src/storage-preview/azext_storage_preview/oauth_token_util.py new file mode 100644 index 00000000000..043678a85d9 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/oauth_token_util.py @@ -0,0 +1,44 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +import threading + + +class TokenUpdater: + """ + This class updates a given token_credential periodically using the provided callback function. + It shows one way of making sure the credential does not become expired. + """ + def __init__(self, token_credential, cli_ctx): + self.token_credential = token_credential + self.cli_ctx = cli_ctx + + # the timer needs to be protected, as later on it is possible that one thread is setting a new timer and + # another thread is trying to cancel the timer + self.lock = threading.Lock() + self.timer_callback() + + def timer_callback(self): + # call the get a new token and set a timer + from azure.cli.core._profile import Profile + from datetime import datetime + # should give back token that is valid for at least 5 mins + token = Profile(cli_ctx=self.cli_ctx).get_raw_token(resource="https://storage.azure.com")[0][2] + self.token_credential.update_token(token['accessToken']) + seconds_left = (datetime.strptime(token['expiresOn'], "%Y-%m-%d %H:%M:%S.%f") - datetime.now()).seconds + if seconds_left < 240: + # acquired token expires in less than 4 mins + raise Exception("Acquired a token expiring in less than 4 minutes") + + with self.lock: + self.timer = threading.Timer(seconds_left - 240, self.timer_callback) + self.timer.daemon = True + self.timer.start() + + def cancel(self): + # the timer needs to be canceled once the command has finished executing + # if not the timer will keep going + with self.lock: + self.timer.cancel() diff --git a/src/storage-preview/azext_storage_preview/profiles.py b/src/storage-preview/azext_storage_preview/profiles.py new file mode 100644 index 00000000000..05cdc4c3244 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/profiles.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. +# -------------------------------------------------------------------------------------------- + +from azure.cli.core.profiles import CustomResourceType + + +CUSTOM_DATA_STORAGE = CustomResourceType('azext_storage_preview.vendored_sdks.azure_storage', None) diff --git a/src/storage-preview/azext_storage_preview/sdkutil.py b/src/storage-preview/azext_storage_preview/sdkutil.py index 32db691a955..d52c4886666 100644 --- a/src/storage-preview/azext_storage_preview/sdkutil.py +++ b/src/storage-preview/azext_storage_preview/sdkutil.py @@ -7,6 +7,7 @@ from azure.cli.core.profiles import get_sdk, supported_api_version, ResourceType from azure.cli.core.profiles._shared import APIVersionException +from .profiles import CUSTOM_DATA_STORAGE def cosmosdb_table_exists(cli_ctx): @@ -20,14 +21,14 @@ def get_table_data_type(cli_ctx, module_name, *type_names): if cosmosdb_table_exists(cli_ctx): return get_sdk(cli_ctx, ResourceType.DATA_COSMOS_TABLE, *type_names, mod=module_name) - return get_sdk(cli_ctx, ResourceType.DATA_STORAGE, *type_names, mod=module_name) + return get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, *type_names, mod=module_name) def get_blob_service_by_type(cli_ctx, blob_type): type_to_service = { - 'block': lambda ctx: get_sdk(ctx, ResourceType.DATA_STORAGE, 'BlockBlobService', mod='blob'), - 'page': lambda ctx: get_sdk(ctx, ResourceType.DATA_STORAGE, 'PageBlobService', mod='blob'), - 'append': lambda ctx: get_sdk(ctx, ResourceType.DATA_STORAGE, 'AppendBlobService', mod='blob') + 'block': lambda ctx: get_sdk(ctx, CUSTOM_DATA_STORAGE, 'BlockBlobService', mod='blob'), + 'page': lambda ctx: get_sdk(ctx, CUSTOM_DATA_STORAGE, 'PageBlobService', mod='blob'), + 'append': lambda ctx: get_sdk(ctx, CUSTOM_DATA_STORAGE, 'AppendBlobService', mod='blob') } try: @@ -41,7 +42,7 @@ def get_blob_types(): def get_blob_tier_names(cli_ctx, model): - t_blob_tier_model = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'blob.models#' + model) + t_blob_tier_model = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'blob.models#' + model) return [v for v in dir(t_blob_tier_model) if not v.startswith('_')] @@ -50,7 +51,7 @@ def get_delete_blob_snapshot_type_names(): def get_delete_blob_snapshot_type(cli_ctx, name): - t_delete_snapshot = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'DeleteSnapshot', mod='blob') + t_delete_snapshot = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'DeleteSnapshot', mod='blob') return {'include': t_delete_snapshot.Include, 'only': t_delete_snapshot.Only}[name] @@ -59,7 +60,7 @@ def get_delete_file_snapshot_type_names(): def get_delete_file_snapshot_type(cli_ctx, name): - t_delete_snapshot = get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'DeleteSnapshot', mod='file.models') + t_delete_snapshot = get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'DeleteSnapshot', mod='file.models') return {'include': t_delete_snapshot.Include}[name] @@ -71,8 +72,8 @@ def get_container_access_type(cli_ctx, name): if name == 'off': return None elif name == 'blob': - return get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'PublicAccess', mod='blob.models').Blob + return get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'PublicAccess', mod='blob.models').Blob elif name == 'container': - return get_sdk(cli_ctx, ResourceType.DATA_STORAGE, 'PublicAccess', mod='blob.models').Container + return get_sdk(cli_ctx, CUSTOM_DATA_STORAGE, 'PublicAccess', mod='blob.models').Container else: raise KeyError diff --git a/src/storage-preview/azext_storage_preview/services_wrapper.py b/src/storage-preview/azext_storage_preview/services_wrapper.py index dffd0d43ddc..ef9cde6dfa7 100644 --- a/src/storage-preview/azext_storage_preview/services_wrapper.py +++ b/src/storage-preview/azext_storage_preview/services_wrapper.py @@ -3,9 +3,10 @@ # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- -from azure.cli.core.profiles import get_sdk, ResourceType +from azure.cli.core.profiles import get_sdk from ._client_factory import generic_data_service_factory +from .profiles import CUSTOM_DATA_STORAGE class ServiceProperties(object): @@ -29,7 +30,7 @@ def get_logging(self, timeout=None): return self.get_service_properties()(timeout=timeout).__dict__['logging'] def set_logging(self, read, write, delete, retention, timeout=None): - t_logging, t_retention_policy = get_sdk(self.cli_ctx, ResourceType.DATA_STORAGE, 'Logging', 'RetentionPolicy', + t_logging, t_retention_policy = get_sdk(self.cli_ctx, CUSTOM_DATA_STORAGE, 'Logging', 'RetentionPolicy', mod='common.models') retention_policy = t_retention_policy(enabled=retention != 0, days=retention) @@ -42,7 +43,7 @@ def get_cors(self, timeout=None): def add_cors(self, origins, methods, max_age, exposed_headers=None, allowed_headers=None, timeout=None): from azure.common import AzureHttpError - t_cors_rule = get_sdk(self.cli_ctx, ResourceType.DATA_STORAGE, 'CorsRule', mod='common.models') + t_cors_rule = get_sdk(self.cli_ctx, CUSTOM_DATA_STORAGE, 'CorsRule', mod='common.models') cors = self.get_cors(timeout) new_rule = t_cors_rule(origins, methods, max_age, exposed_headers, allowed_headers) cors.append(new_rule) @@ -71,7 +72,7 @@ def get_metrics(self, interval, timeout=None): return metrics def set_metrics(self, retention, hour, minute, api=None, timeout=None): - t_metrics, t_retention_policy = get_sdk(self.cli_ctx, ResourceType.DATA_STORAGE, 'Metrics', 'RetentionPolicy', + t_metrics, t_retention_policy = get_sdk(self.cli_ctx, CUSTOM_DATA_STORAGE, 'Metrics', 'RetentionPolicy', mod='common.models') retention_policy = t_retention_policy(enabled=retention != 0, days=retention) diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_account_sas.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_account_sas.yaml index 0d08da30c30..48ee9409608 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_account_sas.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_account_sas.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:45:22Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:45:22Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 21:34:20 GMT'] + date: ['Tue, 01 May 2018 21:45:24 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,13 +49,14 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 21:34:22 GMT'] + date: ['Tue, 01 May 2018 21:45:25 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/8a086227-3618-4a74-a755-38b3688eb994?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/24581443-fca0-428e-a1d4-90be654a41cc?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] + x-content-type-options: [nosniff] x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} - request: @@ -65,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/8a086227-3618-4a74-a755-38b3688eb994?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/24581443-fca0-428e-a1d4-90be654a41cc?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T21:34:22.0842668Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T21:34:22.0842668Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T21:34:22.0374010Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:25.8713651Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:25.8713651Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:25.6526131Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 21:34:39 GMT'] + date: ['Tue, 01 May 2018 21:45:43 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -83,6 +86,7 @@ interactions: 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: null @@ -94,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"J5jUEDgfRpsBRD+1YMqix8HkQTeQYw3cNMCovEFGuVu5wjlKg18YgmyE7tgz+6xWbi7CHfu8xeaukkBWNKLEDg==","permissions":"FULL"},{"keyName":"key2","value":"KmnoycxJZ2GyAcmyDuqCtNX4L6fvt/ZibesD3WBz+rOmAXkPJ4HqQJ+d8K485TFTHSKCoJ/vAWRO3xJTzcuoFQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"94uEIpJdQoFGvUpLq172W0WoJBW3KeymBQWjNIBcr123RxLVfRRVSCUUonj7bzAKTUI/gxPz4pB63bh6nuFp2w==","permissions":"FULL"},{"keyName":"key2","value":"K2uoQjVDL7nTil9ce1C8lxWta/FPE/5gqD/CL40AkFzidAFKmgam6IwToKaMYrXfEVywTfRKAwUflstPQEjwyQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 21:34:41 GMT'] + date: ['Tue, 01 May 2018 21:45:44 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -112,6 +116,7 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] + x-content-type-options: [nosniff] x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: @@ -123,24 +128,26 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2017-10-01 response: - body: {string: '{"value":[{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest6075/providers/Microsoft.Storage/storageAccounts/stgbnc8939","name":"stgbnc8939","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:07:05.6471355Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:07:05.6471355Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:07:05.6158803Z","primaryEndpoints":{"blob":"https://stgbnc8939.blob.core.windows.net/","queue":"https://stgbnc8939.queue.core.windows.net/","table":"https://stgbnc8939.table.core.windows.net/","file":"https://stgbnc8939.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest1501/providers/Microsoft.Storage/storageAccounts/stgjavavme823820652e","name":"stgjavavme823820652e","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:41:10.5736026Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:41:10.5736026Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:41:10.5579773Z","primaryEndpoints":{"blob":"https://stgjavavme823820652e.blob.core.windows.net/","queue":"https://stgjavavme823820652e.queue.core.windows.net/","table":"https://stgjavavme823820652e.table.core.windows.net/","file":"https://stgjavavme823820652e.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest9977/providers/Microsoft.Storage/storageAccounts/stgjavavm333507506ea","name":"stgjavavm333507506ea","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:32:47.9591527Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:32:47.9591527Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:32:47.8341521Z","primaryEndpoints":{"blob":"https://stgjavavm333507506ea.blob.core.windows.net/","queue":"https://stgjavavm333507506ea.queue.core.windows.net/","table":"https://stgjavavm333507506ea.table.core.windows.net/","file":"https://stgjavavm333507506ea.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3602/providers/Microsoft.Storage/storageAccounts/stg8927","name":"stg8927","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:37:55.0112849Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:37:55.0112849Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:37:54.9800708Z","primaryEndpoints":{"blob":"https://stg8927.blob.core.windows.net/","queue":"https://stg8927.queue.core.windows.net/","table":"https://stg8927.table.core.windows.net/","file":"https://stg8927.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest6075/providers/Microsoft.Storage/storageAccounts/stgjavavm52d424261a2","name":"stgjavavm52d424261a2","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:07:42.0875788Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:07:42.0875788Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:07:42.0563640Z","primaryEndpoints":{"blob":"https://stgjavavm52d424261a2.blob.core.windows.net/","queue":"https://stgjavavm52d424261a2.queue.core.windows.net/","table":"https://stgjavavm52d424261a2.table.core.windows.net/","file":"https://stgjavavm52d424261a2.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilx-group/providers/Microsoft.Storage/storageAccounts/awilxdevlab9274","name":"awilxdevlab9274","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{"hidden-DevTestLabs-LabUId":"3f487f2b-f13a-422f-a05c-761b17b0200d"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9463952Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9463952Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-07T22:43:14.9920432Z","primaryEndpoints":{"blob":"https://awilxdevlab9274.blob.core.windows.net/","queue":"https://awilxdevlab9274.queue.core.windows.net/","table":"https://awilxdevlab9274.table.core.windows.net/","file":"https://awilxdevlab9274.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest2038/providers/Microsoft.Storage/storageAccounts/stgjavavmac8610156cf","name":"stgjavavmac8610156cf","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:00:07.6351597Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:00:07.6351597Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:00:07.6039345Z","primaryEndpoints":{"blob":"https://stgjavavmac8610156cf.blob.core.windows.net/","queue":"https://stgjavavmac8610156cf.queue.core.windows.net/","table":"https://stgjavavmac8610156cf.table.core.windows.net/","file":"https://stgjavavmac8610156cf.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest5772/providers/Microsoft.Storage/storageAccounts/stgjavavm42113837dbb","name":"stgjavavm42113837dbb","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T12:48:36.1026547Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T12:48:36.1026547Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T12:48:36.0714523Z","primaryEndpoints":{"blob":"https://stgjavavm42113837dbb.blob.core.windows.net/","queue":"https://stgjavavm42113837dbb.queue.core.windows.net/","table":"https://stgjavavm42113837dbb.table.core.windows.net/","file":"https://stgjavavm42113837dbb.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg8678/providers/Microsoft.Storage/storageAccounts/stg7343","name":"stg7343","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.0401485Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.0401485Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-10-22T20:47:23.8366703Z","primaryEndpoints":{"blob":"https://stg7343.blob.core.windows.net/","queue":"https://stg7343.queue.core.windows.net/","table":"https://stg7343.table.core.windows.net/","file":"https://stg7343.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg7434/providers/Microsoft.Storage/storageAccounts/stg8548","name":"stg8548","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:39:56.6875433Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:39:56.6875433Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:39:56.6562752Z","primaryEndpoints":{"blob":"https://stg8548.blob.core.windows.net/","queue":"https://stg8548.queue.core.windows.net/","table":"https://stg8548.table.core.windows.net/","file":"https://stg8548.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest7312/providers/Microsoft.Storage/storageAccounts/stgjavavm43d95373650","name":"stgjavavm43d95373650","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:26:15.2306952Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:26:15.2306952Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:26:15.2150846Z","primaryEndpoints":{"blob":"https://stgjavavm43d95373650.blob.core.windows.net/","queue":"https://stgjavavm43d95373650.queue.core.windows.net/","table":"https://stgjavavm43d95373650.table.core.windows.net/","file":"https://stgjavavm43d95373650.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3093/providers/Microsoft.Storage/storageAccounts/stg4985","name":"stg4985","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:28:11.7207048Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:28:11.7207048Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:28:11.6894612Z","primaryEndpoints":{"blob":"https://stg4985.blob.core.windows.net/","queue":"https://stg4985.queue.core.windows.net/","table":"https://stg4985.table.core.windows.net/","file":"https://stg4985.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest9977/providers/Microsoft.Storage/storageAccounts/stgbnc9165","name":"stgbnc9165","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:31:59.0738016Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:31:59.0738016Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:31:59.0581787Z","primaryEndpoints":{"blob":"https://stgbnc9165.blob.core.windows.net/","queue":"https://stgbnc9165.queue.core.windows.net/","table":"https://stgbnc9165.table.core.windows.net/","file":"https://stgbnc9165.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest5772/providers/Microsoft.Storage/storageAccounts/stgjavavmcb00830196f","name":"stgjavavmcb00830196f","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T12:54:38.4891429Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T12:54:38.4891429Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T12:54:38.4422705Z","primaryEndpoints":{"blob":"https://stgjavavmcb00830196f.blob.core.windows.net/","queue":"https://stgjavavmcb00830196f.queue.core.windows.net/","table":"https://stgjavavmcb00830196f.table.core.windows.net/","file":"https://stgjavavmcb00830196f.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg1377/providers/Microsoft.Storage/storageAccounts/stg35556","name":"stg35556","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:29:10.3577399Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:29:10.3577399Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:29:10.3421120Z","primaryEndpoints":{"blob":"https://stg35556.blob.core.windows.net/","queue":"https://stg35556.queue.core.windows.net/","table":"https://stg35556.table.core.windows.net/","file":"https://stg35556.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg9de67119f7/providers/Microsoft.Storage/storageAccounts/st3ea29977a4","name":"st3ea29977a4","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9620243Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9620243Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-01T04:00:22.2331421Z","primaryEndpoints":{"blob":"https://st3ea29977a4.blob.core.windows.net/","queue":"https://st3ea29977a4.queue.core.windows.net/","table":"https://st3ea29977a4.table.core.windows.net/","file":"https://st3ea29977a4.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg8678/providers/Microsoft.Storage/storageAccounts/stg24699","name":"stg24699","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9932855Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9932855Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-10-22T20:47:23.3426259Z","primaryEndpoints":{"blob":"https://stg24699.blob.core.windows.net/","queue":"https://stg24699.queue.core.windows.net/","table":"https://stg24699.table.core.windows.net/","file":"https://stg24699.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3819/providers/Microsoft.Storage/storageAccounts/stg2666","name":"stg2666","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T23:15:53.4245534Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T23:15:53.4245534Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T23:15:53.3932595Z","primaryEndpoints":{"blob":"https://stg2666.blob.core.windows.net/","queue":"https://stg2666.queue.core.windows.net/","table":"https://stg2666.table.core.windows.net/","file":"https://stg2666.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest2038/providers/Microsoft.Storage/storageAccounts/stgbnc6669","name":"stgbnc6669","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T12:59:33.1175728Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T12:59:33.1175728Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T12:59:33.0863032Z","primaryEndpoints":{"blob":"https://stgbnc6669.blob.core.windows.net/","queue":"https://stgbnc6669.queue.core.windows.net/","table":"https://stgbnc6669.table.core.windows.net/","file":"https://stgbnc6669.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg1377/providers/Microsoft.Storage/storageAccounts/stg1798","name":"stg1798","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:29:09.9827302Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:29:09.9827302Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:29:09.9671375Z","primaryEndpoints":{"blob":"https://stg1798.blob.core.windows.net/","queue":"https://stg1798.queue.core.windows.net/","table":"https://stg1798.table.core.windows.net/","file":"https://stg1798.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgacs012581245/providers/Microsoft.Storage/storageAccounts/006lrpasdhh5mvyswarm1","name":"006lrpasdhh5mvyswarm1","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.0940448Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.0940448Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T21:26:50.0472235Z","primaryEndpoints":{"blob":"https://006lrpasdhh5mvyswarm1.blob.core.windows.net/","queue":"https://006lrpasdhh5mvyswarm1.queue.core.windows.net/","table":"https://006lrpasdhh5mvyswarm1.table.core.windows.net/","file":"https://006lrpasdhh5mvyswarm1.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest1501/providers/Microsoft.Storage/storageAccounts/stgbnc4090","name":"stgbnc4090","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:40:34.7555760Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:40:34.7555760Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:40:34.7086970Z","primaryEndpoints":{"blob":"https://stgbnc4090.blob.core.windows.net/","queue":"https://stgbnc4090.queue.core.windows.net/","table":"https://stgbnc4090.table.core.windows.net/","file":"https://stgbnc4090.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest7312/providers/Microsoft.Storage/storageAccounts/stgjavavm57b02213d98","name":"stgjavavm57b02213d98","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:18:03.2964360Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:18:03.2964360Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:18:03.1714019Z","primaryEndpoints":{"blob":"https://stgjavavm57b02213d98.blob.core.windows.net/","queue":"https://stgjavavm57b02213d98.queue.core.windows.net/","table":"https://stgjavavm57b02213d98.table.core.windows.net/","file":"https://stgjavavm57b02213d98.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgacs012581245/providers/Microsoft.Storage/storageAccounts/6lrpasdhh5mvyswarm0","name":"6lrpasdhh5mvyswarm0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.3284452Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.3284452Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T21:26:50.3127881Z","primaryEndpoints":{"blob":"https://6lrpasdhh5mvyswarm0.blob.core.windows.net/","queue":"https://6lrpasdhh5mvyswarm0.queue.core.windows.net/","table":"https://6lrpasdhh5mvyswarm0.table.core.windows.net/","file":"https://6lrpasdhh5mvyswarm0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg9511/providers/Microsoft.Storage/storageAccounts/stg4096","name":"stg4096","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:51:31.4329960Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:51:31.4329960Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:51:31.4174074Z","primaryEndpoints":{"blob":"https://stg4096.blob.core.windows.net/","queue":"https://stg4096.queue.core.windows.net/","table":"https://stg4096.table.core.windows.net/","file":"https://stg4096.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3602/providers/Microsoft.Storage/storageAccounts/stg4719","name":"stg4719","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:38:44.2043180Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:38:44.2043180Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:38:44.1730915Z","primaryEndpoints":{"blob":"https://stg4719.blob.core.windows.net/","queue":"https://stg4719.queue.core.windows.net/","table":"https://stg4719.table.core.windows.net/","file":"https://stg4719.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg771/providers/Microsoft.Storage/storageAccounts/stg1266","name":"stg1266","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:51:55.4657267Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:51:55.4657267Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:51:55.4344476Z","primaryEndpoints":{"blob":"https://stg1266.blob.core.windows.net/","queue":"https://stg1266.queue.core.windows.net/","table":"https://stg1266.table.core.windows.net/","file":"https://stg1266.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgacs012581245/providers/Microsoft.Storage/storageAccounts/o06lrpasdhh5mvyswarm5","name":"o06lrpasdhh5mvyswarm5","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.1097186Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.1097186Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T21:26:50.0472235Z","primaryEndpoints":{"blob":"https://o06lrpasdhh5mvyswarm5.blob.core.windows.net/","queue":"https://o06lrpasdhh5mvyswarm5.queue.core.windows.net/","table":"https://o06lrpasdhh5mvyswarm5.table.core.windows.net/","file":"https://o06lrpasdhh5mvyswarm5.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/abc6562group/providers/Microsoft.Storage/storageAccounts/stgvm1096b7d777504ab","name":"stgvm1096b7d777504ab","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:59:46.9015035Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:59:46.9015035Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:59:46.8702570Z","primaryEndpoints":{"blob":"https://stgvm1096b7d777504ab.blob.core.windows.net/","queue":"https://stgvm1096b7d777504ab.queue.core.windows.net/","table":"https://stgvm1096b7d777504ab.table.core.windows.net/","file":"https://stgvm1096b7d777504ab.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest8491/providers/Microsoft.Storage/storageAccounts/stgjavavm0539488888b","name":"stgjavavm0539488888b","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:36:35.0405070Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:36:35.0405070Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:36:35.0092280Z","primaryEndpoints":{"blob":"https://stgjavavm0539488888b.blob.core.windows.net/","queue":"https://stgjavavm0539488888b.queue.core.windows.net/","table":"https://stgjavavm0539488888b.table.core.windows.net/","file":"https://stgjavavm0539488888b.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgacs012581245/providers/Microsoft.Storage/storageAccounts/c06lrpasdhh5mvyswarm3","name":"c06lrpasdhh5mvyswarm3","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.0472235Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.0472235Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T21:26:50.0159158Z","primaryEndpoints":{"blob":"https://c06lrpasdhh5mvyswarm3.blob.core.windows.net/","queue":"https://c06lrpasdhh5mvyswarm3.queue.core.windows.net/","table":"https://c06lrpasdhh5mvyswarm3.table.core.windows.net/","file":"https://c06lrpasdhh5mvyswarm3.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest6621/providers/Microsoft.Storage/storageAccounts/stgjavavmd2b85295b29","name":"stgjavavmd2b85295b29","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:44:27.7895164Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:44:27.7895164Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:44:27.7738787Z","primaryEndpoints":{"blob":"https://stgjavavmd2b85295b29.blob.core.windows.net/","queue":"https://stgjavavmd2b85295b29.queue.core.windows.net/","table":"https://stgjavavmd2b85295b29.table.core.windows.net/","file":"https://stgjavavmd2b85295b29.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3502/providers/Microsoft.Storage/storageAccounts/stg2889","name":"stg2889","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T08:17:44.3543509Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T08:17:44.3543509Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T08:17:44.3230988Z","primaryEndpoints":{"blob":"https://stg2889.blob.core.windows.net/","queue":"https://stg2889.queue.core.windows.net/","table":"https://stg2889.table.core.windows.net/","file":"https://stg2889.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgacs012581245/providers/Microsoft.Storage/storageAccounts/6lrpasdhh5mvyswarmdiag0","name":"6lrpasdhh5mvyswarmdiag0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.3127881Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.3127881Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T21:26:50.2971980Z","primaryEndpoints":{"blob":"https://6lrpasdhh5mvyswarmdiag0.blob.core.windows.net/","queue":"https://6lrpasdhh5mvyswarmdiag0.queue.core.windows.net/","table":"https://6lrpasdhh5mvyswarmdiag0.table.core.windows.net/","file":"https://6lrpasdhh5mvyswarmdiag0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest8711/providers/Microsoft.Storage/storageAccounts/stgbnc2032","name":"stgbnc2032","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:14:27.1828795Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:14:27.1828795Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:14:27.1672525Z","primaryEndpoints":{"blob":"https://stgbnc2032.blob.core.windows.net/","queue":"https://stgbnc2032.queue.core.windows.net/","table":"https://stgbnc2032.table.core.windows.net/","file":"https://stgbnc2032.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg9511/providers/Microsoft.Storage/storageAccounts/stg3196","name":"stg3196","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:52:22.3698825Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:52:22.3698825Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:52:22.3386431Z","primaryEndpoints":{"blob":"https://stg3196.blob.core.windows.net/","queue":"https://stg3196.queue.core.windows.net/","table":"https://stg3196.table.core.windows.net/","file":"https://stg3196.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest4180/providers/Microsoft.Storage/storageAccounts/stgbnc5175","name":"stgbnc5175","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:50:47.5307698Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:50:47.5307698Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:50:47.4995195Z","primaryEndpoints":{"blob":"https://stgbnc5175.blob.core.windows.net/","queue":"https://stgbnc5175.queue.core.windows.net/","table":"https://stgbnc5175.table.core.windows.net/","file":"https://stgbnc5175.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest2727/providers/Microsoft.Storage/storageAccounts/stgbnc5888","name":"stgbnc5888","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:47:26.5456311Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:47:26.5456311Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:47:26.5143633Z","primaryEndpoints":{"blob":"https://stgbnc5888.blob.core.windows.net/","queue":"https://stgbnc5888.queue.core.windows.net/","table":"https://stgbnc5888.table.core.windows.net/","file":"https://stgbnc5888.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest5560/providers/Microsoft.Storage/storageAccounts/stgjavavm3ce9008563d","name":"stgjavavm3ce9008563d","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:10:52.6901809Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:10:52.6901809Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:10:52.6745969Z","primaryEndpoints":{"blob":"https://stgjavavm3ce9008563d.blob.core.windows.net/","queue":"https://stgjavavm3ce9008563d.queue.core.windows.net/","table":"https://stgjavavm3ce9008563d.table.core.windows.net/","file":"https://stgjavavm3ce9008563d.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgcomvad814855116a9864/providers/Microsoft.Storage/storageAccounts/stgvm32735dbab87839ad","name":"stgvm32735dbab87839ad","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.2745251Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.2745251Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-05T02:16:45.9826459Z","primaryEndpoints":{"blob":"https://stgvm32735dbab87839ad.blob.core.windows.net/","queue":"https://stgvm32735dbab87839ad.queue.core.windows.net/","table":"https://stgvm32735dbab87839ad.table.core.windows.net/","file":"https://stgvm32735dbab87839ad.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgacs012581245/providers/Microsoft.Storage/storageAccounts/i06lrpasdhh5mvyswarm4","name":"i06lrpasdhh5mvyswarm4","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.0784417Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.0784417Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T21:26:50.0159158Z","primaryEndpoints":{"blob":"https://i06lrpasdhh5mvyswarm4.blob.core.windows.net/","queue":"https://i06lrpasdhh5mvyswarm4.queue.core.windows.net/","table":"https://i06lrpasdhh5mvyswarm4.table.core.windows.net/","file":"https://i06lrpasdhh5mvyswarm4.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest8132/providers/Microsoft.Storage/storageAccounts/stgbnc1363","name":"stgbnc1363","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:17:50.0973565Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:17:50.0973565Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:17:50.0660905Z","primaryEndpoints":{"blob":"https://stgbnc1363.blob.core.windows.net/","queue":"https://stgbnc1363.queue.core.windows.net/","table":"https://stgbnc1363.table.core.windows.net/","file":"https://stgbnc1363.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3502/providers/Microsoft.Storage/storageAccounts/stg1316","name":"stg1316","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T08:17:43.8700047Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T08:17:43.8700047Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T08:17:43.8387584Z","primaryEndpoints":{"blob":"https://stg1316.blob.core.windows.net/","queue":"https://stg1316.queue.core.windows.net/","table":"https://stg1316.table.core.windows.net/","file":"https://stg1316.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3819/providers/Microsoft.Storage/storageAccounts/stg6080","name":"stg6080","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T23:15:53.3307714Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T23:15:53.3307714Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T23:15:53.2995412Z","primaryEndpoints":{"blob":"https://stg6080.blob.core.windows.net/","queue":"https://stg6080.queue.core.windows.net/","table":"https://stg6080.table.core.windows.net/","file":"https://stg6080.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg7434/providers/Microsoft.Storage/storageAccounts/stg379","name":"stg379","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:40:27.5308774Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:40:27.5308774Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:40:27.4683812Z","primaryEndpoints":{"blob":"https://stg379.blob.core.windows.net/","queue":"https://stg379.queue.core.windows.net/","table":"https://stg379.table.core.windows.net/","file":"https://stg379.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest3168/providers/Microsoft.Storage/storageAccounts/stgjavavm3dd27109215","name":"stgjavavm3dd27109215","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:03:43.1243832Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:03:43.1243832Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:03:43.0775007Z","primaryEndpoints":{"blob":"https://stgjavavm3dd27109215.blob.core.windows.net/","queue":"https://stgjavavm3dd27109215.queue.core.windows.net/","table":"https://stgjavavm3dd27109215.table.core.windows.net/","file":"https://stgjavavm3dd27109215.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg771/providers/Microsoft.Storage/storageAccounts/stg8019","name":"stg8019","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:52:44.3417181Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:52:44.3417181Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:52:44.3260939Z","primaryEndpoints":{"blob":"https://stg8019.blob.core.windows.net/","queue":"https://stg8019.queue.core.windows.net/","table":"https://stg8019.table.core.windows.net/","file":"https://stg8019.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rged92722916/providers/Microsoft.Storage/storageAccounts/st39055055d8","name":"st39055055d8","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9620243Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9620243Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-14T08:29:14.1632499Z","primaryEndpoints":{"blob":"https://st39055055d8.blob.core.windows.net/","queue":"https://st39055055d8.queue.core.windows.net/","table":"https://st39055055d8.table.core.windows.net/","file":"https://st39055055d8.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3093/providers/Microsoft.Storage/storageAccounts/stg31634","name":"stg31634","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:28:13.1805425Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:28:13.1805425Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:28:13.1493074Z","primaryEndpoints":{"blob":"https://stg31634.blob.core.windows.net/","queue":"https://stg31634.queue.core.windows.net/","table":"https://stg31634.table.core.windows.net/","file":"https://stg31634.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest5960/providers/Microsoft.Storage/storageAccounts/stgjavavmbf44552277c","name":"stgjavavmbf44552277c","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T12:56:14.6365579Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T12:56:14.6365579Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T12:56:14.6053295Z","primaryEndpoints":{"blob":"https://stgjavavmbf44552277c.blob.core.windows.net/","queue":"https://stgjavavmbf44552277c.queue.core.windows.net/","table":"https://stgjavavmbf44552277c.table.core.windows.net/","file":"https://stgjavavmbf44552277c.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest6805/providers/Microsoft.Storage/storageAccounts/stgjavavm76e93900fb5","name":"stgjavavm76e93900fb5","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:28:13.0923956Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:28:13.0923956Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:28:13.0611455Z","primaryEndpoints":{"blob":"https://stgjavavm76e93900fb5.blob.core.windows.net/","queue":"https://stgjavavm76e93900fb5.queue.core.windows.net/","table":"https://stgjavavm76e93900fb5.table.core.windows.net/","file":"https://stgjavavm76e93900fb5.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgacs012581245/providers/Microsoft.Storage/storageAccounts/606lrpasdhh5mvyswarm2","name":"606lrpasdhh5mvyswarm2","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.0005917Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T21:26:50.0005917Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T21:26:49.9690407Z","primaryEndpoints":{"blob":"https://606lrpasdhh5mvyswarm2.blob.core.windows.net/","queue":"https://606lrpasdhh5mvyswarm2.queue.core.windows.net/","table":"https://606lrpasdhh5mvyswarm2.table.core.windows.net/","file":"https://606lrpasdhh5mvyswarm2.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg1819/providers/Microsoft.Storage/storageAccounts/stg6604","name":"stg6604","type":"Microsoft.Storage/storageAccounts","location":"eastus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T14:47:30.4664398Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T14:47:30.4664398Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T14:47:30.4195672Z","primaryEndpoints":{"blob":"https://stg6604.blob.core.windows.net/","queue":"https://stg6604.queue.core.windows.net/","table":"https://stg6604.table.core.windows.net/","file":"https://stg6604.file.core.windows.net/"},"primaryLocation":"eastus2","statusOfPrimary":"available","secondaryLocation":"centralus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg2755/providers/Microsoft.Storage/storageAccounts/stg4523","name":"stg4523","type":"Microsoft.Storage/storageAccounts","location":"eastus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T20:03:25.0602489Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T20:03:25.0602489Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T20:03:25.0133960Z","primaryEndpoints":{"blob":"https://stg4523.blob.core.windows.net/","queue":"https://stg4523.queue.core.windows.net/","table":"https://stg4523.table.core.windows.net/","file":"https://stg4523.file.core.windows.net/"},"primaryLocation":"eastus2","statusOfPrimary":"available","secondaryLocation":"centralus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationpyaffz2jgatrx3wmu5i3ms7e6vq6ffr6c7vpfafzb27ypbrksahwiedyawvx4g/providers/Microsoft.Storage/storageAccounts/acliautomationlab2482","name":"acliautomationlab2482","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"fad847a0-13b6-4061-9649-ad71226702f7"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-06T18:03:05.8117216Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-06T18:03:05.8117216Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-06T18:03:05.7648048Z","primaryEndpoints":{"blob":"https://acliautomationlab2482.blob.core.windows.net/","queue":"https://acliautomationlab2482.queue.core.windows.net/","table":"https://acliautomationlab2482.table.core.windows.net/","file":"https://acliautomationlab2482.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationtoxqsril3nh52zq7j2qv45ep7rtig4xnyg77hmcyl2uuausjromygxx7poq77x/providers/Microsoft.Storage/storageAccounts/acliautomationlab920","name":"acliautomationlab920","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"0958ba1e-279c-465c-a6a8-2b58d04b60b1"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-08T22:52:48.9788934Z","primaryEndpoints":{"blob":"https://acliautomationlab920.blob.core.windows.net/","queue":"https://acliautomationlab920.queue.core.windows.net/","table":"https://acliautomationlab920.table.core.windows.net/","file":"https://acliautomationlab920.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01/providers/Microsoft.Storage/storageAccounts/acliautomationlab2281","name":"acliautomationlab2281","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"72f1b266-2a21-4f0a-af01-934c93c72e6e"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-07T16:46:33.749166Z","primaryEndpoints":{"blob":"https://acliautomationlab2281.blob.core.windows.net/","queue":"https://acliautomationlab2281.queue.core.windows.net/","table":"https://acliautomationlab2281.table.core.windows.net/","file":"https://acliautomationlab2281.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01q2ksq7ibjhnl6y3qahzaq67qjcuv3p3xuhqhg6nufdyu6sttjlioho5vlbmp/providers/Microsoft.Storage/storageAccounts/acliautomationlab9808","name":"acliautomationlab9808","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"568e6db7-10b6-40e1-af55-4e5c0c9460b3"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-03T04:09:43.1153175Z","primaryEndpoints":{"blob":"https://acliautomationlab9808.blob.core.windows.net/","queue":"https://acliautomationlab9808.queue.core.windows.net/","table":"https://acliautomationlab9808.table.core.windows.net/","file":"https://acliautomationlab9808.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01p5mb65te4noiwqbh7ni3sggmdrhbawq2atk5mc6elgdat5qkg6fuguonzmvj/providers/Microsoft.Storage/storageAccounts/acliautomationlab9396","name":"acliautomationlab9396","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"ba56a262-8f28-4665-86d9-18a308784945"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-08T20:14:17.6792122Z","primaryEndpoints":{"blob":"https://acliautomationlab9396.blob.core.windows.net/","queue":"https://acliautomationlab9396.queue.core.windows.net/","table":"https://acliautomationlab9396.table.core.windows.net/","file":"https://acliautomationlab9396.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01ei2lu47wac7ixneeciagpf7ocqwvjvrq6rvkjl5hr2t3tyqkrzjdrsyd5lom/providers/Microsoft.Storage/storageAccounts/acliautomationlab4923","name":"acliautomationlab4923","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"db05f622-e24b-4bad-8265-0042a9feacff"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-26T20:28:36.5037123Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-26T20:28:36.5037123Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-26T20:28:36.3943699Z","primaryEndpoints":{"blob":"https://acliautomationlab4923.blob.core.windows.net/","queue":"https://acliautomationlab4923.queue.core.windows.net/","table":"https://acliautomationlab4923.table.core.windows.net/","file":"https://acliautomationlab4923.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation014o3znldng4uswc6mo6fhrx7gjnqitwa7b4ygnel5rhm624kjc53acrmyl3rk/providers/Microsoft.Storage/storageAccounts/acliautomationlab1633","name":"acliautomationlab1633","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"e33eb9e2-9aa6-4024-90b0-44509f6beded"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-06T18:03:01.1799270Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-06T18:03:01.1799270Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-06T18:03:01.1486631Z","primaryEndpoints":{"blob":"https://acliautomationlab1633.blob.core.windows.net/","queue":"https://acliautomationlab1633.queue.core.windows.net/","table":"https://acliautomationlab1633.table.core.windows.net/","file":"https://acliautomationlab1633.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T21:34:22.0842668Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T21:34:22.0842668Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T21:34:22.0374010Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationr7zmwrv545myosbhrhgmvyxvh473lloj24vcvwx5xuabi7hadxngt4sg7cbfxm/providers/Microsoft.Storage/storageAccounts/acliautomationlab4621","name":"acliautomationlab4621","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"3acb626c-e8a0-431d-bd15-47d2472c013f"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-07T18:36:05.7790991Z","primaryEndpoints":{"blob":"https://acliautomationlab4621.blob.core.windows.net/","queue":"https://acliautomationlab4621.queue.core.windows.net/","table":"https://acliautomationlab4621.table.core.windows.net/","file":"https://acliautomationlab4621.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation/providers/Microsoft.Storage/storageAccounts/acliautomationlab2987","name":"acliautomationlab2987","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"9f45d4bf-7e01-4684-9438-37c712728db1"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-07T16:48:01.7641299Z","primaryEndpoints":{"blob":"https://acliautomationlab2987.blob.core.windows.net/","queue":"https://acliautomationlab2987.queue.core.windows.net/","table":"https://acliautomationlab2987.table.core.windows.net/","file":"https://acliautomationlab2987.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01l6uben7lla33aijx72dhaf3wb7dlqb2u7ixr7vhmojrwbr6e5gv2rvdneg5r/providers/Microsoft.Storage/storageAccounts/acliautomationlab1471","name":"acliautomationlab1471","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"48fc5481-154a-40d8-a96c-90f85a3186b5"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-26T15:33:35.4529781Z","primaryEndpoints":{"blob":"https://acliautomationlab1471.blob.core.windows.net/","queue":"https://acliautomationlab1471.queue.core.windows.net/","table":"https://acliautomationlab1471.table.core.windows.net/","file":"https://acliautomationlab1471.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgcv22bl3p5jculym7mxzp4qrzni5wnq3cmtnvsu52yhtwvwicm3fe3k6m24yqdilgh/providers/Microsoft.Storage/storageAccounts/clireg23zq5h4f67b5091810","name":"clireg23zq5h4f67b5091810","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"containerregistry":"clireg23zq5h4f67b5wu"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T09:18:14.1652856Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T09:18:14.1652856Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T09:18:14.1184391Z","primaryEndpoints":{"blob":"https://clireg23zq5h4f67b5091810.blob.core.windows.net/","queue":"https://clireg23zq5h4f67b5091810.queue.core.windows.net/","table":"https://clireg23zq5h4f67b5091810.table.core.windows.net/","file":"https://clireg23zq5h4f67b5091810.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation014m5le4sxlxnlbtvhekxljqndmwiuvvczqg2qumloh3nw3a6dg6qfqz65dczz/providers/Microsoft.Storage/storageAccounts/acliautomationlab2832","name":"acliautomationlab2832","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"ec24f56f-0a82-42f5-ae26-f391815aaf39"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-02T07:38:16.9674949Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-02T07:38:16.9674949Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-02T07:38:16.9356739Z","primaryEndpoints":{"blob":"https://acliautomationlab2832.blob.core.windows.net/","queue":"https://acliautomationlab2832.queue.core.windows.net/","table":"https://acliautomationlab2832.table.core.windows.net/","file":"https://acliautomationlab2832.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationbvd5rqbmr4xfzxbbls4vvm4zl66fz5ykv73nqx3rtougzgxhksyjpn3l43txu3/providers/Microsoft.Storage/storageAccounts/acliautomationlab386","name":"acliautomationlab386","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"40c3e5e9-6d70-41a5-9ba0-dedd33f96963"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-02T07:38:24.9254634Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-02T07:38:24.9254634Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-02T07:38:24.9098324Z","primaryEndpoints":{"blob":"https://acliautomationlab386.blob.core.windows.net/","queue":"https://acliautomationlab386.queue.core.windows.net/","table":"https://acliautomationlab386.table.core.windows.net/","file":"https://acliautomationlab386.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgcv22bl3p5jculym7mxzp4qrzni5wnq3cmtnvsu52yhtwvwicm3fe3k6m24yqdilgh/providers/Microsoft.Storage/storageAccounts/clitestaycxoezila4zvz3oc","name":"clitestaycxoezila4zvz3oc","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T09:17:31.1771220Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T09:17:31.1771220Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T09:17:31.1146217Z","primaryEndpoints":{"blob":"https://clitestaycxoezila4zvz3oc.blob.core.windows.net/","queue":"https://clitestaycxoezila4zvz3oc.queue.core.windows.net/","table":"https://clitestaycxoezila4zvz3oc.table.core.windows.net/","file":"https://clitestaycxoezila4zvz3oc.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationzlgmnmobxi6bkdkatnybuntm5ic5csahw33ox6rmthro3hjfgfqujqkdlrxfje/providers/Microsoft.Storage/storageAccounts/acliautomationlab3782","name":"acliautomationlab3782","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"b9dc7e5c-5ff3-4687-bf01-83833a4ccd53"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-04T06:41:36.4612382Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-04T06:41:36.4612382Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-04T06:41:36.4143632Z","primaryEndpoints":{"blob":"https://acliautomationlab3782.blob.core.windows.net/","queue":"https://acliautomationlab3782.queue.core.windows.net/","table":"https://acliautomationlab3782.table.core.windows.net/","file":"https://acliautomationlab3782.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01bn7wa4ubnulp6m4khobeloz6mvbxxg6ygalgryhylt2zpjgqcumow6ih26ud/providers/Microsoft.Storage/storageAccounts/acliautomationlab8383","name":"acliautomationlab8383","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"417cc8eb-3e86-4a90-9ce0-e215c7a4b9be"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-31T19:38:42.9687239Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-31T19:38:42.9687239Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-31T19:38:42.9375080Z","primaryEndpoints":{"blob":"https://acliautomationlab8383.blob.core.windows.net/","queue":"https://acliautomationlab8383.queue.core.windows.net/","table":"https://acliautomationlab8383.table.core.windows.net/","file":"https://acliautomationlab8383.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgz7d3e2yb2inofrrnaj3lvvbvwqqigncdhefwljdibplopfilty5ix4dxhdnegz7s4/providers/Microsoft.Storage/storageAccounts/clitestobxdwzqyayj32oxzm","name":"clitestobxdwzqyayj32oxzm","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:31:04.8312684Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:31:04.8312684Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:31:04.7844176Z","primaryEndpoints":{"blob":"https://clitestobxdwzqyayj32oxzm.blob.core.windows.net/","queue":"https://clitestobxdwzqyayj32oxzm.queue.core.windows.net/","table":"https://clitestobxdwzqyayj32oxzm.table.core.windows.net/","file":"https://clitestobxdwzqyayj32oxzm.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg2claqiiin2xfwkiskmfrvz2arekdocwsl7ff63gkroosvxv2whwbgdanw4tgesatc/providers/Microsoft.Storage/storageAccounts/clitest6uk5hhihzzby4ytcq","name":"clitest6uk5hhihzzby4ytcq","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T08:12:51.8379955Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T08:12:51.8379955Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T08:12:51.7754853Z","primaryEndpoints":{"blob":"https://clitest6uk5hhihzzby4ytcq.blob.core.windows.net/","queue":"https://clitest6uk5hhihzzby4ytcq.queue.core.windows.net/","table":"https://clitest6uk5hhihzzby4ytcq.table.core.windows.net/","file":"https://clitest6uk5hhihzzby4ytcq.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01ldu2m7bvtvotoelxgw2icl5sivnvoixudxyql6l42hseiv5stbbuulg7g3h4/providers/Microsoft.Storage/storageAccounts/acliautomationlab9248","name":"acliautomationlab9248","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"3ff20302-c399-4d32-88ed-2c84952da1c3"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-04T00:40:16.2044479Z","primaryEndpoints":{"blob":"https://acliautomationlab9248.blob.core.windows.net/","queue":"https://acliautomationlab9248.queue.core.windows.net/","table":"https://acliautomationlab9248.table.core.windows.net/","file":"https://acliautomationlab9248.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation016zx7ulhvrc7ng6fcdst72y2t2fgbvbyueykqnw4d76aq4gyxd267voh5nixs/providers/Microsoft.Storage/storageAccounts/acliautomationlab8049","name":"acliautomationlab8049","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"909a5513-261d-4cd4-a8dd-19a18a866f77"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-08T02:56:53.0185142Z","primaryEndpoints":{"blob":"https://acliautomationlab8049.blob.core.windows.net/","queue":"https://acliautomationlab8049.queue.core.windows.net/","table":"https://acliautomationlab8049.table.core.windows.net/","file":"https://acliautomationlab8049.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation013mvyy356dnjmb5iwivgwu3gp2bgpjaik6sx3zxuqg36vhnchoc5vwvzzvxu4/providers/Microsoft.Storage/storageAccounts/acliautomationlab8828","name":"acliautomationlab8828","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"33f5487f-2303-4193-9ec1-9f4820d78d00"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-05T07:38:28.7575542Z","primaryEndpoints":{"blob":"https://acliautomationlab8828.blob.core.windows.net/","queue":"https://acliautomationlab8828.queue.core.windows.net/","table":"https://acliautomationlab8828.table.core.windows.net/","file":"https://acliautomationlab8828.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01iy5u4xyaed2wgxpr3oshkjvesx7eypiagoyydutuuwbrotz44zddkgr7qfay/providers/Microsoft.Storage/storageAccounts/acliautomationlab1940","name":"acliautomationlab1940","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"867204a5-7d7c-41c3-866f-845829532736"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-04T06:41:24.3204875Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-04T06:41:24.3204875Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-04T06:41:24.2579926Z","primaryEndpoints":{"blob":"https://acliautomationlab1940.blob.core.windows.net/","queue":"https://acliautomationlab1940.queue.core.windows.net/","table":"https://acliautomationlab1940.table.core.windows.net/","file":"https://acliautomationlab1940.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationrmo5dcfkn2tcdobw3qhwsafqbqgge3o7emagrlfoxgsioc2jr7e5cjztqewzla/providers/Microsoft.Storage/storageAccounts/acliautomationlab6710","name":"acliautomationlab6710","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"90a7effd-a5b2-48ce-ac70-88b48096881c"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-03T04:10:00.39885Z","primaryEndpoints":{"blob":"https://acliautomationlab6710.blob.core.windows.net/","queue":"https://acliautomationlab6710.queue.core.windows.net/","table":"https://acliautomationlab6710.table.core.windows.net/","file":"https://acliautomationlab6710.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationpytfzqow2fyxfbik7w4k34yguitwrmhunpwy4ozpgsy243novl4fjnlev2zfly/providers/Microsoft.Storage/storageAccounts/acliautomationlab1008","name":"acliautomationlab1008","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"7dfd84e6-8815-45cd-a927-4ea20034ff9e"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-31T19:38:56.9344030Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-31T19:38:56.9344030Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-31T19:38:56.8562798Z","primaryEndpoints":{"blob":"https://acliautomationlab1008.blob.core.windows.net/","queue":"https://acliautomationlab1008.queue.core.windows.net/","table":"https://acliautomationlab1008.table.core.windows.net/","file":"https://acliautomationlab1008.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationgbb6evd4zx72bc5wpfijxlcbpo5n24rkj2kg3y57jpl2mkxc6w5x5exnsantug/providers/Microsoft.Storage/storageAccounts/acliautomationlab5191","name":"acliautomationlab5191","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"bfb18d73-f216-4bdc-aba6-252bba91adb2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-26T20:28:36.4256121Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-26T20:28:36.4256121Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-26T20:28:36.3631077Z","primaryEndpoints":{"blob":"https://acliautomationlab5191.blob.core.windows.net/","queue":"https://acliautomationlab5191.queue.core.windows.net/","table":"https://acliautomationlab5191.table.core.windows.net/","file":"https://acliautomationlab5191.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationrcjorwrtg3oudx2a6akfwe5e6n7ocvpleklcwwqclzazlly76iaddtkjqtdwbe/providers/Microsoft.Storage/storageAccounts/acliautomationlab5146","name":"acliautomationlab5146","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"6734c4ab-6f8d-46e5-afec-0ed8275cccc7"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T16:45:00.1329602Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T16:45:00.1329602Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T16:45:00.0861198Z","primaryEndpoints":{"blob":"https://acliautomationlab5146.blob.core.windows.net/","queue":"https://acliautomationlab5146.queue.core.windows.net/","table":"https://acliautomationlab5146.table.core.windows.net/","file":"https://acliautomationlab5146.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01undmfcuvtas2vq76b7cdf2bcb522g55yjxgq26oqjumof4h3bkhfa5f5galo/providers/Microsoft.Storage/storageAccounts/acliautomationlab3187","name":"acliautomationlab3187","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"3cd350aa-2568-49ea-a4a2-41dd07e9e8ac"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-02T05:13:09.9630161Z","primaryEndpoints":{"blob":"https://acliautomationlab3187.blob.core.windows.net/","queue":"https://acliautomationlab3187.queue.core.windows.net/","table":"https://acliautomationlab3187.table.core.windows.net/","file":"https://acliautomationlab3187.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationsxtwbd7crie33fjnfjz2zp7ibcmfz4gyjh5mvqoqkz3y7txx7g34rl7mmoucew/providers/Microsoft.Storage/storageAccounts/acliautomationlab3276","name":"acliautomationlab3276","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"9f96ba9d-7858-43e0-a93a-9424a36a0975"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-05T07:38:39.4934331Z","primaryEndpoints":{"blob":"https://acliautomationlab3276.blob.core.windows.net/","queue":"https://acliautomationlab3276.queue.core.windows.net/","table":"https://acliautomationlab3276.table.core.windows.net/","file":"https://acliautomationlab3276.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Premium_LRS","tier":"Premium"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sdk-test/providers/Microsoft.Storage/storageAccounts/sdkteststor","name":"sdkteststor","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.8539723Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-05-21T04:29:51.1804697Z","primaryEndpoints":{"blob":"https://sdkteststor.blob.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationyl5duneg4gkn25csd2rd4lbm2yjjq5n33z24jxikgchafi3xnfgokwxtsor56r/providers/Microsoft.Storage/storageAccounts/acliautomationlab1231","name":"acliautomationlab1231","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"f500a48c-e003-403a-b50a-903a96f6d226"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7133409Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7133409Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-08T02:59:00.3810995Z","primaryEndpoints":{"blob":"https://acliautomationlab1231.blob.core.windows.net/","queue":"https://acliautomationlab1231.queue.core.windows.net/","table":"https://acliautomationlab1231.table.core.windows.net/","file":"https://acliautomationlab1231.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgh677nueggg6d7igrusbfk2xh6gja7um3ccgomqlsm3nxazm2ixsvo4uppithrwls5/providers/Microsoft.Storage/storageAccounts/clitestyfn6lmyp56kgtrigf","name":"clitestyfn6lmyp56kgtrigf","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:42:23.4666652Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:42:23.4666652Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:42:23.3885547Z","primaryEndpoints":{"blob":"https://clitestyfn6lmyp56kgtrigf.blob.core.windows.net/","queue":"https://clitestyfn6lmyp56kgtrigf.queue.core.windows.net/","table":"https://clitestyfn6lmyp56kgtrigf.table.core.windows.net/","file":"https://clitestyfn6lmyp56kgtrigf.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg6246/providers/Microsoft.Storage/storageAccounts/javawebapp735267887","name":"javawebapp735267887","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T12:44:08.0866484Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T12:44:08.0866484Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T12:44:08.0397682Z","primaryEndpoints":{"blob":"https://javawebapp735267887.blob.core.windows.net/","queue":"https://javawebapp735267887.queue.core.windows.net/","table":"https://javawebapp735267887.table.core.windows.net/","file":"https://javawebapp735267887.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01ptu376gffvlvblokeyvsvqoefixzvz2uosy7gvqozzktnhvpufmcc5ut4ytd/providers/Microsoft.Storage/storageAccounts/acliautomationlab2257","name":"acliautomationlab2257","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"e6cd699b-4ac2-4022-a435-960bc7d3ee9f"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-08T22:52:45.5675859Z","primaryEndpoints":{"blob":"https://acliautomationlab2257.blob.core.windows.net/","queue":"https://acliautomationlab2257.queue.core.windows.net/","table":"https://acliautomationlab2257.table.core.windows.net/","file":"https://acliautomationlab2257.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01kr3ll4q2x5vuwozn4xz6zoybb4odfjebsjtwcxrehup7jnzykb47tmcsohyz/providers/Microsoft.Storage/storageAccounts/acliautomationlab6989","name":"acliautomationlab6989","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"3e585a6c-7c78-494c-99f8-a56e8734fb6d"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T16:44:45.7241602Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T16:44:45.7241602Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T16:44:45.6772890Z","primaryEndpoints":{"blob":"https://acliautomationlab6989.blob.core.windows.net/","queue":"https://acliautomationlab6989.queue.core.windows.net/","table":"https://acliautomationlab6989.table.core.windows.net/","file":"https://acliautomationlab6989.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationt3zeu76ormrubewlqrnf4ykozdfs3pr2ahftj4d33tuybrpobavi5sbtcdcfc4/providers/Microsoft.Storage/storageAccounts/acliautomationlab9106","name":"acliautomationlab9106","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"498bf2d2-520c-42fd-b974-269015697a98"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-04T00:40:33.0829429Z","primaryEndpoints":{"blob":"https://acliautomationlab9106.blob.core.windows.net/","queue":"https://acliautomationlab9106.queue.core.windows.net/","table":"https://acliautomationlab9106.table.core.windows.net/","file":"https://acliautomationlab9106.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg9129/providers/Microsoft.Storage/storageAccounts/javawebapp575092367","name":"javawebapp575092367","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T02:46:42.1621654Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T02:46:42.1621654Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T02:46:42.1153349Z","primaryEndpoints":{"blob":"https://javawebapp575092367.blob.core.windows.net/","queue":"https://javawebapp575092367.queue.core.windows.net/","table":"https://javawebapp575092367.table.core.windows.net/","file":"https://javawebapp575092367.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation2nscoydrikfz67cluekp6xqv4zkltay5x7ubl3qh2yb73qfdjq3j24fzcrd766/providers/Microsoft.Storage/storageAccounts/acliautomationlab2578","name":"acliautomationlab2578","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"8cf9f8f3-ff0c-43a5-809d-b4be39f17fa8"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-02T05:13:20.2601933Z","primaryEndpoints":{"blob":"https://acliautomationlab2578.blob.core.windows.net/","queue":"https://acliautomationlab2578.queue.core.windows.net/","table":"https://acliautomationlab2578.table.core.windows.net/","file":"https://acliautomationlab2578.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxstorage","name":"wilxstorage","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-05T21:40:13.3804210Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-05T21:40:13.3804210Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-05T21:40:13.3335235Z","primaryEndpoints":{"blob":"https://wilxstorage.blob.core.windows.net/","queue":"https://wilxstorage.queue.core.windows.net/","table":"https://wilxstorage.table.core.windows.net/","file":"https://wilxstorage.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorage-secondary.blob.core.windows.net/","queue":"https://wilxstorage-secondary.queue.core.windows.net/","table":"https://wilxstorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Premium_LRS","tier":"Premium"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgfluentchash-2695/providers/Microsoft.Storage/storageAccounts/stg7841","name":"stg7841","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:42:38.5746805Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:42:38.5746805Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:42:38.5121931Z","primaryEndpoints":{"blob":"https://stg7841.blob.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgfluentchash-2695/providers/Microsoft.Storage/storageAccounts/stgchashvmb0493512bd3","name":"stgchashvmb0493512bd3","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:48:24.0431630Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:48:24.0431630Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:48:23.9806708Z","primaryEndpoints":{"blob":"https://stgchashvmb0493512bd3.blob.core.windows.net/","queue":"https://stgchashvmb0493512bd3.queue.core.windows.net/","table":"https://stgchashvmb0493512bd3.table.core.windows.net/","file":"https://stgchashvmb0493512bd3.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available","secondaryLocation":"northcentralus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgfluentchash-2695/providers/Microsoft.Storage/storageAccounts/stgchashvmf966267182c","name":"stgchashvmf966267182c","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:43:09.8431316Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:43:09.8431316Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:43:09.7962537Z","primaryEndpoints":{"blob":"https://stgchashvmf966267182c.blob.core.windows.net/","queue":"https://stgchashvmf966267182c.queue.core.windows.net/","table":"https://stgchashvmf966267182c.table.core.windows.net/","file":"https://stgchashvmf966267182c.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available","secondaryLocation":"northcentralus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/debekoe1test2/providers/Microsoft.Storage/storageAccounts/debekoe1test2","name":"debekoe1test2","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:26:27.0937394Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:26:27.0937394Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:26:27.0624521Z","primaryEndpoints":{"blob":"https://debekoe1test2.blob.core.windows.net/","queue":"https://debekoe1test2.queue.core.windows.net/","table":"https://debekoe1test2.table.core.windows.net/","file":"https://debekoe1test2.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available","secondaryLocation":"westcentralus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://debekoe1test2-secondary.blob.core.windows.net/","queue":"https://debekoe1test2-secondary.queue.core.windows.net/","table":"https://debekoe1test2-secondary.table.core.windows.net/"}}}]}'} + body: {string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/o0zeaawp7t7n4skagntpri4","name":"o0zeaawp7t7n4skagntpri4","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.2637195Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.2637195Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.2168154Z","primaryEndpoints":{"blob":"https://o0zeaawp7t7n4skagntpri4.blob.core.windows.net/","queue":"https://o0zeaawp7t7n4skagntpri4.queue.core.windows.net/","table":"https://o0zeaawp7t7n4skagntpri4.table.core.windows.net/","file":"https://o0zeaawp7t7n4skagntpri4.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/zeaawp7t7n4skagntpub","name":"zeaawp7t7n4skagntpub","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.5762847Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.5762847Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.5294154Z","primaryEndpoints":{"blob":"https://zeaawp7t7n4skagntpub.blob.core.windows.net/","queue":"https://zeaawp7t7n4skagntpub.queue.core.windows.net/","table":"https://zeaawp7t7n4skagntpub.table.core.windows.net/","file":"https://zeaawp7t7n4skagntpub.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/storGRP1/providers/Microsoft.Storage/storageAccounts/storacc2","name":"storacc2","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T18:24:41.3214880Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T18:24:41.3214880Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-09T18:24:41.2902466Z","primaryEndpoints":{"blob":"https://storacc2.blob.core.windows.net/","queue":"https://storacc2.queue.core.windows.net/","table":"https://storacc2.table.core.windows.net/","file":"https://storacc2.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/zeaawp7t7n4skdiag0","name":"zeaawp7t7n4skdiag0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.7951275Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.7951275Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.7482499Z","primaryEndpoints":{"blob":"https://zeaawp7t7n4skdiag0.blob.core.windows.net/","queue":"https://zeaawp7t7n4skdiag0.queue.core.windows.net/","table":"https://zeaawp7t7n4skdiag0.table.core.windows.net/","file":"https://zeaawp7t7n4skdiag0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyReallyCoolVM202/providers/Microsoft.Storage/storageAccounts/mynewaccount1234","name":"mynewaccount1234","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-27T21:34:15.2961058Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-27T21:34:15.2961058Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-27T21:34:15.2335978Z","primaryEndpoints":{"blob":"https://mynewaccount1234.blob.core.windows.net/","queue":"https://mynewaccount1234.queue.core.windows.net/","table":"https://mynewaccount1234.table.core.windows.net/","file":"https://mynewaccount1234.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/60zeaawp7t7n4skagntpri1","name":"60zeaawp7t7n4skagntpri1","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:59.4978129Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:59.4978129Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:33:59.3727743Z","primaryEndpoints":{"blob":"https://60zeaawp7t7n4skagntpri1.blob.core.windows.net/","queue":"https://60zeaawp7t7n4skagntpri1.queue.core.windows.net/","table":"https://60zeaawp7t7n4skagntpri1.table.core.windows.net/","file":"https://60zeaawp7t7n4skagntpri1.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/00zeaawp7t7n4skagntpri0","name":"00zeaawp7t7n4skagntpri0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:57.1533290Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:57.1533290Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:33:57.1064646Z","primaryEndpoints":{"blob":"https://00zeaawp7t7n4skagntpri0.blob.core.windows.net/","queue":"https://00zeaawp7t7n4skagntpri0.queue.core.windows.net/","table":"https://00zeaawp7t7n4skagntpri0.table.core.windows.net/","file":"https://00zeaawp7t7n4skagntpri0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Premium_LRS","tier":"Premium"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxgroupdisks925","name":"wilxgroupdisks925","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-13T17:14:42.2678046Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-13T17:14:42.2678046Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-13T17:14:42.2522063Z","primaryEndpoints":{"blob":"https://wilxgroupdisks925.blob.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/i0zeaawp7t7n4skagntpri3","name":"i0zeaawp7t7n4skagntpri3","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:59.2790240Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:59.2790240Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:33:59.2321471Z","primaryEndpoints":{"blob":"https://i0zeaawp7t7n4skagntpri3.blob.core.windows.net/","queue":"https://i0zeaawp7t7n4skagntpri3.queue.core.windows.net/","table":"https://i0zeaawp7t7n4skagntpri3.table.core.windows.net/","file":"https://i0zeaawp7t7n4skagntpri3.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/zeaawp7t7n4skexhb0","name":"zeaawp7t7n4skexhb0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.8576146Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.8576146Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.7951275Z","primaryEndpoints":{"blob":"https://zeaawp7t7n4skexhb0.blob.core.windows.net/","queue":"https://zeaawp7t7n4skexhb0.queue.core.windows.net/","table":"https://zeaawp7t7n4skexhb0.table.core.windows.net/","file":"https://zeaawp7t7n4skexhb0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/zeaawp7t7n4skmstr0","name":"zeaawp7t7n4skmstr0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.5294154Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.5294154Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.4825090Z","primaryEndpoints":{"blob":"https://zeaawp7t7n4skmstr0.blob.core.windows.net/","queue":"https://zeaawp7t7n4skmstr0.queue.core.windows.net/","table":"https://zeaawp7t7n4skmstr0.table.core.windows.net/","file":"https://zeaawp7t7n4skmstr0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/c0zeaawp7t7n4skagntpri2","name":"c0zeaawp7t7n4skagntpri2","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.8889157Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.8889157Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.8263879Z","primaryEndpoints":{"blob":"https://c0zeaawp7t7n4skagntpri2.blob.core.windows.net/","queue":"https://c0zeaawp7t7n4skagntpri2.queue.core.windows.net/","table":"https://c0zeaawp7t7n4skagntpri2.table.core.windows.net/","file":"https://c0zeaawp7t7n4skagntpri2.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"identity":{"principalId":"4b358eca-1f6e-4da5-a90c-5cfda2b6ca83","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/amar/providers/Microsoft.Storage/storageAccounts/eastustorage1","name":"eastustorage1","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-21T02:38:33.4035294Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-21T02:38:33.4035294Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-03-21T02:38:33.3253713Z","primaryEndpoints":{"blob":"https://eastustorage1.blob.core.windows.net/","queue":"https://eastustorage1.queue.core.windows.net/","table":"https://eastustorage1.table.core.windows.net/","file":"https://eastustorage1.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroupeastus2/providers/Microsoft.Storage/storageAccounts/wilxstorageeastus2","name":"wilxstorageeastus2","type":"Microsoft.Storage/storageAccounts","location":"eastus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-30T18:32:07.3429304Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-30T18:32:07.3429304Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-30T18:32:07.2804546Z","primaryEndpoints":{"blob":"https://wilxstorageeastus2.blob.core.windows.net/","queue":"https://wilxstorageeastus2.queue.core.windows.net/","table":"https://wilxstorageeastus2.table.core.windows.net/","file":"https://wilxstorageeastus2.file.core.windows.net/"},"primaryLocation":"eastus2","statusOfPrimary":"available","secondaryLocation":"centralus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorageeastus2-secondary.blob.core.windows.net/","queue":"https://wilxstorageeastus2-secondary.queue.core.windows.net/","table":"https://wilxstorageeastus2-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgojaoj267klrvs47gnp57mu55f6yoziamdogqqs72by7ljczabahxkfmzi5mh2glk5/providers/Microsoft.Storage/storageAccounts/clitest7tkosn7vrxnjiifrm","name":"clitest7tkosn7vrxnjiifrm","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:30.8088827Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:30.8088827Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"ResolvingDns","creationTime":"2018-05-01T21:45:30.4963753Z","primaryEndpoints":{"blob":"https://clitest7tkosn7vrxnjiifrm.blob.core.windows.net/","queue":"https://clitest7tkosn7vrxnjiifrm.queue.core.windows.net/","table":"https://clitest7tkosn7vrxnjiifrm.table.core.windows.net/","file":"https://clitest7tkosn7vrxnjiifrm.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgp3j2bt5nvsedgoxpqt6xtucbamnbo7jkgrcckdigt3aclxopqxio6lxjlqrj3czo7/providers/Microsoft.Storage/storageAccounts/clitestt7lrbv35ny3lgnfak","name":"clitestt7lrbv35ny3lgnfak","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1522571Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1522571Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:17:59.2725025Z","primaryEndpoints":{"blob":"https://clitestt7lrbv35ny3lgnfak.blob.core.windows.net/","queue":"https://clitestt7lrbv35ny3lgnfak.queue.core.windows.net/","table":"https://clitestt7lrbv35ny3lgnfak.table.core.windows.net/","file":"https://clitestt7lrbv35ny3lgnfak.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vscode-spot/providers/Microsoft.Storage/storageAccounts/spot1936b9594f55526a14","name":"spot1936b9594f55526a14","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-30T04:32:25.2179795Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-30T04:32:25.2179795Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-30T04:32:25.0930004Z","primaryEndpoints":{"blob":"https://spot1936b9594f55526a14.blob.core.windows.net/","queue":"https://spot1936b9594f55526a14.queue.core.windows.net/","table":"https://spot1936b9594f55526a14.table.core.windows.net/","file":"https://spot1936b9594f55526a14.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/awilxlab6038","name":"awilxlab6038","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"8887c3df-fb11-4c4a-b5ea-fb85003cd93d"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-11T22:14:43.7809117Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-11T22:14:43.7809117Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-11T22:14:43.6871681Z","primaryEndpoints":{"blob":"https://awilxlab6038.blob.core.windows.net/","queue":"https://awilxlab6038.queue.core.windows.net/","table":"https://awilxlab6038.table.core.windows.net/","file":"https://awilxlab6038.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy985","name":"foozy985","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2460333Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2460333Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-11T22:39:05.4716715Z","primaryEndpoints":{"blob":"https://foozy985.blob.core.windows.net/","queue":"https://foozy985.queue.core.windows.net/","table":"https://foozy985.table.core.windows.net/","file":"https://foozy985.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/amar/providers/Microsoft.Storage/storageAccounts/testacc7561","name":"testacc7561","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-13T01:22:28.4626746Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-13T01:22:28.4626746Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-03-13T01:22:28.4157923Z","primaryEndpoints":{"blob":"https://testacc7561.blob.core.windows.net/","queue":"https://testacc7561.queue.core.windows.net/","table":"https://testacc7561.table.core.windows.net/","file":"https://testacc7561.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxstorage2","name":"wilxstorage2","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-16T19:43:30.0571507Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-16T19:43:30.0571507Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-16T19:43:29.9946790Z","primaryEndpoints":{"blob":"https://wilxstorage2.blob.core.windows.net/","queue":"https://wilxstorage2.queue.core.windows.net/","table":"https://wilxstorage2.table.core.windows.net/","file":"https://wilxstorage2.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorage2-secondary.blob.core.windows.net/","queue":"https://wilxstorage2-secondary.queue.core.windows.net/","table":"https://wilxstorage2-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_ZRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/foostore103","name":"foostore103","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1991330Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1991330Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-05-25T23:52:18.1234838Z","primaryEndpoints":{"blob":"https://foostore103.blob.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_ZRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/foostore102","name":"foostore102","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1835342Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1835342Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-05-25T19:32:49.5192125Z","primaryEndpoints":{"blob":"https://foostore102.blob.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitest345","name":"zitest345","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.8313291Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.8313291Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-07T21:55:13.9394493Z","primaryEndpoints":{"blob":"https://zitest345.blob.core.windows.net/","queue":"https://zitest345.queue.core.windows.net/","table":"https://zitest345.table.core.windows.net/","file":"https://zitest345.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitest","name":"zitest","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.7688032Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.7688032Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-05-03T20:07:05.353746Z","primaryEndpoints":{"blob":"https://zitest.blob.core.windows.net/","queue":"https://zitest.queue.core.windows.net/","table":"https://zitest.table.core.windows.net/","file":"https://zitest.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitest1012","name":"zitest1012","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.8001033Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.8001033Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2017-07-07T02:12:27.684591Z","primaryEndpoints":{"blob":"https://zitest1012.blob.core.windows.net/","queue":"https://zitest1012.queue.core.windows.net/","table":"https://zitest1012.table.core.windows.net/","file":"https://zitest1012.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgvnc44s5iiyknx6iehpbmjsf7y6xsqhrqvyb5opb2yr5wagkqftcqlbbpfkralo2id/providers/Microsoft.Storage/storageAccounts/clitesttc4beb6y7zcdc7zly","name":"clitesttc4beb6y7zcdc7zly","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1522571Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1522571Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:16:26.3626209Z","primaryEndpoints":{"blob":"https://clitesttc4beb6y7zcdc7zly.blob.core.windows.net/","queue":"https://clitesttc4beb6y7zcdc7zly.queue.core.windows.net/","table":"https://clitesttc4beb6y7zcdc7zly.table.core.windows.net/","file":"https://clitesttc4beb6y7zcdc7zly.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg3yzhuqlkkv4l7gq2shu6suxl6afxmnlqhzh2u225pyluz6ukscohbbgylq7s5zifg/providers/Microsoft.Storage/storageAccounts/clitestl45vwc3spozojtlf7","name":"clitestl45vwc3spozojtlf7","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:28.7932429Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:28.7932429Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:28.7151381Z","primaryEndpoints":{"blob":"https://clitestl45vwc3spozojtlf7.blob.core.windows.net/","queue":"https://clitestl45vwc3spozojtlf7.queue.core.windows.net/","table":"https://clitestl45vwc3spozojtlf7.table.core.windows.net/","file":"https://clitestl45vwc3spozojtlf7.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/lmazuel-docker-machine/providers/Microsoft.Storage/storageAccounts/vhdsn51j1sdv8scmv98fmq8q","name":"vhdsn51j1sdv8scmv98fmq8q","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.3085287Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.3085287Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-03T21:43:45.5227216Z","primaryEndpoints":{"blob":"https://vhdsn51j1sdv8scmv98fmq8q.blob.core.windows.net/","queue":"https://vhdsn51j1sdv8scmv98fmq8q.queue.core.windows.net/","table":"https://vhdsn51j1sdv8scmv98fmq8q.table.core.windows.net/","file":"https://vhdsn51j1sdv8scmv98fmq8q.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy984","name":"foozy984","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2460333Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2460333Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-11T18:22:12.9346214Z","primaryEndpoints":{"blob":"https://foozy984.blob.core.windows.net/","queue":"https://foozy984.queue.core.windows.net/","table":"https://foozy984.table.core.windows.net/","file":"https://foozy984.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgzlponhuihq2f3r2ncatzpvyupukdm6ixm63jq2whzuvbuchjhov4vejrj4uspf7ju/providers/Microsoft.Storage/storageAccounts/clitestracm62rkgrryoiiig","name":"clitestracm62rkgrryoiiig","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T16:57:00.9900481Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T16:57:00.9900481Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T16:57:00.9119456Z","primaryEndpoints":{"blob":"https://clitestracm62rkgrryoiiig.blob.core.windows.net/","queue":"https://clitestracm62rkgrryoiiig.queue.core.windows.net/","table":"https://clitestracm62rkgrryoiiig.table.core.windows.net/","file":"https://clitestracm62rkgrryoiiig.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgaz3x2qjeu5xahclts7r7bqdgy4cuuxwsjuskjp2yklftsa2vvhsfnv32dzawwhxj4/providers/Microsoft.Storage/storageAccounts/clitestzsvhxykinf3qwcf25","name":"clitestzsvhxykinf3qwcf25","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:27.3088492Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:27.3088492Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:27.1057047Z","primaryEndpoints":{"blob":"https://clitestzsvhxykinf3qwcf25.blob.core.windows.net/","queue":"https://clitestzsvhxykinf3qwcf25.queue.core.windows.net/","table":"https://clitestzsvhxykinf3qwcf25.table.core.windows.net/","file":"https://clitestzsvhxykinf3qwcf25.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/testacc209","name":"testacc209","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.3156846Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.3156846Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-01-26T19:04:16.5466637Z","primaryEndpoints":{"blob":"https://testacc209.blob.core.windows.net/","queue":"https://testacc209.queue.core.windows.net/","table":"https://testacc209.table.core.windows.net/","file":"https://testacc209.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgi5u2fwbpqi6kc6yo2odysgg2zhkd7hteysctgc2uhogvocg4hdpi4dx6o7zo7j4z5/providers/Microsoft.Storage/storageAccounts/clitestmym7gychmllliz4j3","name":"clitestmym7gychmllliz4j3","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:26.3557297Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:26.3557297Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:26.0744949Z","primaryEndpoints":{"blob":"https://clitestmym7gychmllliz4j3.blob.core.windows.net/","queue":"https://clitestmym7gychmllliz4j3.queue.core.windows.net/","table":"https://clitestmym7gychmllliz4j3.table.core.windows.net/","file":"https://clitestmym7gychmllliz4j3.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cloud-shell-storage-westus/providers/Microsoft.Storage/storageAccounts/cs400977cdb163fx435fx9c3","name":"cs400977cdb163fx435fx9c3","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"ms-resource-usage":"azure-cloud-shell"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-10-31T20:15:56.3292318Z","primaryEndpoints":{"blob":"https://cs400977cdb163fx435fx9c3.blob.core.windows.net/","queue":"https://cs400977cdb163fx435fx9c3.queue.core.windows.net/","table":"https://cs400977cdb163fx435fx9c3.table.core.windows.net/","file":"https://cs400977cdb163fx435fx9c3.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgwgjgodisz2vcsd55l3bixhutc5fbnyeyjuyatvgcv5k7sfzmxd6q2w4krnuq53zb7/providers/Microsoft.Storage/storageAccounts/clitestwwftaylvfj7kendae","name":"clitestwwftaylvfj7kendae","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:22:09.5983536Z","primaryEndpoints":{"blob":"https://clitestwwftaylvfj7kendae.blob.core.windows.net/","queue":"https://clitestwwftaylvfj7kendae.queue.core.windows.net/","table":"https://clitestwwftaylvfj7kendae.table.core.windows.net/","file":"https://clitestwwftaylvfj7kendae.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ziptxtdepl51/providers/Microsoft.Storage/storageAccounts/36y3ij42opovcstandardsa","name":"36y3ij42opovcstandardsa","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1054140Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1054140Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-15T01:53:43.4548265Z","primaryEndpoints":{"blob":"https://36y3ij42opovcstandardsa.blob.core.windows.net/","queue":"https://36y3ij42opovcstandardsa.queue.core.windows.net/","table":"https://36y3ij42opovcstandardsa.table.core.windows.net/","file":"https://36y3ij42opovcstandardsa.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgaungorwypaguq2ueh77vyexw7bdmu72z7vjoql6tnofssibb7u7bf2oex6iqg6jzz/providers/Microsoft.Storage/storageAccounts/clitestydki2n33vwyrmdoub","name":"clitestydki2n33vwyrmdoub","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:31.1057749Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:31.1057749Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"ResolvingDns","creationTime":"2018-05-01T21:45:30.8713726Z","primaryEndpoints":{"blob":"https://clitestydki2n33vwyrmdoub.blob.core.windows.net/","queue":"https://clitestydki2n33vwyrmdoub.queue.core.windows.net/","table":"https://clitestydki2n33vwyrmdoub.table.core.windows.net/","file":"https://clitestydki2n33vwyrmdoub.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://clitestydki2n33vwyrmdoub-secondary.blob.core.windows.net/","queue":"https://clitestydki2n33vwyrmdoub-secondary.queue.core.windows.net/","table":"https://clitestydki2n33vwyrmdoub-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitestb21","name":"zitestb21","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0656866Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0656866Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-08-23T20:10:50.2990885Z","primaryEndpoints":{"blob":"https://zitestb21.blob.core.windows.net/","queue":"https://zitestb21.queue.core.windows.net/","table":"https://zitestb21.table.core.windows.net/","file":"https://zitestb21.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy891","name":"foozy891","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2147571Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2147571Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-08T00:35:23.7925542Z","primaryEndpoints":{"blob":"https://foozy891.blob.core.windows.net/","queue":"https://foozy891.queue.core.windows.net/","table":"https://foozy891.table.core.windows.net/","file":"https://foozy891.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgh73m2h6rniak5bbqyrad43luxpotdofmlndof5secsxxee53kwocysqnklf4bn7yd/providers/Microsoft.Storage/storageAccounts/clitesttohpa6d65i7atctbm","name":"clitesttohpa6d65i7atctbm","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:05:15.5574981Z","primaryEndpoints":{"blob":"https://clitesttohpa6d65i7atctbm.blob.core.windows.net/","queue":"https://clitesttohpa6d65i7atctbm.queue.core.windows.net/","table":"https://clitesttohpa6d65i7atctbm.table.core.windows.net/","file":"https://clitesttohpa6d65i7atctbm.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgzgkjvgqueh6ylbuj5ktuxx6m6njxoabzpow65vpyumzmtjctna2jgz5lg2ggslj7v/providers/Microsoft.Storage/storageAccounts/clitestncgrg5ytsvot5spgf","name":"clitestncgrg5ytsvot5spgf","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:27.7307380Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:27.7307380Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:27.5276141Z","primaryEndpoints":{"blob":"https://clitestncgrg5ytsvot5spgf.blob.core.windows.net/","queue":"https://clitestncgrg5ytsvot5spgf.queue.core.windows.net/","table":"https://clitestncgrg5ytsvot5spgf.table.core.windows.net/","file":"https://clitestncgrg5ytsvot5spgf.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ZiTest/providers/Microsoft.Storage/storageAccounts/ztesty3456","name":"ztesty3456","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-13T01:01:13.5308331Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-13T01:01:13.5308331Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-01-13T01:01:13.4995571Z","primaryEndpoints":{"blob":"https://ztesty3456.blob.core.windows.net/","queue":"https://ztesty3456.queue.core.windows.net/","table":"https://ztesty3456.table.core.windows.net/","file":"https://ztesty3456.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgpf2denbj6axv7zzgne46nwonr7nj5agy2o2boyvdwim2tk3ha36wt53og4bdbazyl/providers/Microsoft.Storage/storageAccounts/clitestkmwx76vctofb4mjsq","name":"clitestkmwx76vctofb4mjsq","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:26.6057257Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:26.6057257Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:26.4651043Z","primaryEndpoints":{"blob":"https://clitestkmwx76vctofb4mjsq.blob.core.windows.net/","queue":"https://clitestkmwx76vctofb4mjsq.queue.core.windows.net/","table":"https://clitestkmwx76vctofb4mjsq.table.core.windows.net/","file":"https://clitestkmwx76vctofb4mjsq.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:25.8713651Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:25.8713651Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:25.6526131Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/some-unique-rg-name-second/providers/Microsoft.Storage/storageAccounts/tianosatest79","name":"tianosatest79","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:46.6281789Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:46.6281789Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-05-24T23:16:33.9028352Z","primaryEndpoints":{"blob":"https://tianosatest79.blob.core.windows.net/","queue":"https://tianosatest79.queue.core.windows.net/","table":"https://tianosatest79.table.core.windows.net/","file":"https://tianosatest79.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy894","name":"foozy894","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2303818Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2303818Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-08T00:39:03.09634Z","primaryEndpoints":{"blob":"https://foozy894.blob.core.windows.net/","queue":"https://foozy894.queue.core.windows.net/","table":"https://foozy894.table.core.windows.net/","file":"https://foozy894.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg7175/providers/Microsoft.Storage/storageAccounts/testacc7447","name":"testacc7447","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4719947Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4719947Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-21T19:13:51.907911Z","primaryEndpoints":{"blob":"https://testacc7447.blob.core.windows.net/","queue":"https://testacc7447.queue.core.windows.net/","table":"https://testacc7447.table.core.windows.net/","file":"https://testacc7447.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitesta21","name":"zitesta21","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0344305Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0344305Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-08-23T20:01:18.8418933Z","primaryEndpoints":{"blob":"https://zitesta21.blob.core.windows.net/","queue":"https://zitesta21.queue.core.windows.net/","table":"https://zitesta21.table.core.windows.net/","file":"https://zitesta21.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgcmxzjqe2ev2tarnzledhk4m7mk5dsnxznyqtyvx7dixjnjgqs4h5dh37jqoyzj5l5/providers/Microsoft.Storage/storageAccounts/cliteste7bmlfupz34m23jnc","name":"cliteste7bmlfupz34m23jnc","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1366608Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1366608Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-11T00:17:56.913505Z","primaryEndpoints":{"blob":"https://cliteste7bmlfupz34m23jnc.blob.core.windows.net/","queue":"https://cliteste7bmlfupz34m23jnc.queue.core.windows.net/","table":"https://cliteste7bmlfupz34m23jnc.table.core.windows.net/","file":"https://cliteste7bmlfupz34m23jnc.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg9639/providers/Microsoft.Storage/storageAccounts/testacc3070","name":"testacc3070","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.3469905Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.3469905Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-21T18:42:53.9505428Z","primaryEndpoints":{"blob":"https://testacc3070.blob.core.windows.net/","queue":"https://testacc3070.queue.core.windows.net/","table":"https://testacc3070.table.core.windows.net/","file":"https://testacc3070.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg52ctd4ojyg3ymklacmvjr36nyepy2y5j2nq62diomibfwqid5v3esztgp2jcx74kv/providers/Microsoft.Storage/storageAccounts/clitestfu622ozd5q5z6e7zv","name":"clitestfu622ozd5q5z6e7zv","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:30.0901281Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:30.0901281Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"ResolvingDns","creationTime":"2018-05-01T21:45:29.8557657Z","primaryEndpoints":{"blob":"https://clitestfu622ozd5q5z6e7zv.blob.core.windows.net/","queue":"https://clitestfu622ozd5q5z6e7zv.queue.core.windows.net/","table":"https://clitestfu622ozd5q5z6e7zv.table.core.windows.net/","file":"https://clitestfu622ozd5q5z6e7zv.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://clitestfu622ozd5q5z6e7zv-secondary.blob.core.windows.net/","queue":"https://clitestfu622ozd5q5z6e7zv-secondary.queue.core.windows.net/","table":"https://clitestfu622ozd5q5z6e7zv-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgvxzuui3qnyb3zab5viv7a6bxgimxz4k4iz4mgbw7l4js7n6aihljep4uihumvu5vg/providers/Microsoft.Storage/storageAccounts/clitestmkl7mkwejyngxmxpm","name":"clitestmkl7mkwejyngxmxpm","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:29.0276324Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:29.0276324Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:28.8244943Z","primaryEndpoints":{"blob":"https://clitestmkl7mkwejyngxmxpm.blob.core.windows.net/","queue":"https://clitestmkl7mkwejyngxmxpm.queue.core.windows.net/","table":"https://clitestmkl7mkwejyngxmxpm.table.core.windows.net/","file":"https://clitestmkl7mkwejyngxmxpm.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitesty21","name":"zitesty21","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0969536Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0969536Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-08-23T19:55:37.1159138Z","primaryEndpoints":{"blob":"https://zitesty21.blob.core.windows.net/","queue":"https://zitesty21.queue.core.windows.net/","table":"https://zitesty21.table.core.windows.net/","file":"https://zitesty21.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg3787/providers/Microsoft.Storage/storageAccounts/testacc5739","name":"testacc5739","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4406899Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4406899Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-21T02:06:37.3496304Z","primaryEndpoints":{"blob":"https://testacc5739.blob.core.windows.net/","queue":"https://testacc5739.queue.core.windows.net/","table":"https://testacc5739.table.core.windows.net/","file":"https://testacc5739.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg8761/providers/Microsoft.Storage/storageAccounts/testacc3915","name":"testacc3915","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4094279Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4094279Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-21T01:35:41.2354283Z","primaryEndpoints":{"blob":"https://testacc3915.blob.core.windows.net/","queue":"https://testacc3915.queue.core.windows.net/","table":"https://testacc3915.table.core.windows.net/","file":"https://testacc3915.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy89","name":"foozy89","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1991330Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1991330Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-07T22:15:52.1441975Z","primaryEndpoints":{"blob":"https://foozy89.blob.core.windows.net/","queue":"https://foozy89.queue.core.windows.net/","table":"https://foozy89.table.core.windows.net/","file":"https://foozy89.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxgroupdiag169","name":"wilxgroupdiag169","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-29T22:34:01.9561177Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-29T22:34:01.9561177Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-29T22:34:01.8935895Z","primaryEndpoints":{"blob":"https://wilxgroupdiag169.blob.core.windows.net/","queue":"https://wilxgroupdiag169.queue.core.windows.net/","table":"https://wilxgroupdiag169.table.core.windows.net/","file":"https://wilxgroupdiag169.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgg4iadnthjykpxrgud5gxju5rfqzthb6uvqfcm3t7cztqm5v2yyjbfuusommo4mtpv/providers/Microsoft.Storage/storageAccounts/clitestr7jsatxwbv2sefsvr","name":"clitestr7jsatxwbv2sefsvr","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:28.2151132Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:28.2151132Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:28.1369842Z","primaryEndpoints":{"blob":"https://clitestr7jsatxwbv2sefsvr.blob.core.windows.net/","queue":"https://clitestr7jsatxwbv2sefsvr.queue.core.windows.net/","table":"https://clitestr7jsatxwbv2sefsvr.table.core.windows.net/","file":"https://clitestr7jsatxwbv2sefsvr.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Premium_LRS","tier":"Premium"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxgroupdisks899","name":"wilxgroupdisks899","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-11T23:26:25.3653337Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-11T23:26:25.3653337Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-11T23:26:25.2872072Z","primaryEndpoints":{"blob":"https://wilxgroupdisks899.blob.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg6sqzt5phdo5viklk7dquteui74rn3vn2tioolq5dsdnz2znxn6fdwaa47uyu2i4eg/providers/Microsoft.Storage/storageAccounts/clitestgjx5vdkyf74377ieg","name":"clitestgjx5vdkyf74377ieg","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1366608Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1366608Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:09:48.4001597Z","primaryEndpoints":{"blob":"https://clitestgjx5vdkyf74377ieg.blob.core.windows.net/","queue":"https://clitestgjx5vdkyf74377ieg.queue.core.windows.net/","table":"https://clitestgjx5vdkyf74377ieg.table.core.windows.net/","file":"https://clitestgjx5vdkyf74377ieg.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxstorage","name":"wilxstorage","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-15T17:47:45.4399402Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-15T17:47:45.4399402Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-15T17:47:45.3930700Z","primaryEndpoints":{"blob":"https://wilxstorage.blob.core.windows.net/","queue":"https://wilxstorage.queue.core.windows.net/","table":"https://wilxstorage.table.core.windows.net/","file":"https://wilxstorage.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorage-secondary.blob.core.windows.net/","queue":"https://wilxstorage-secondary.queue.core.windows.net/","table":"https://wilxstorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/foostore12978","name":"foostore12978","type":"Microsoft.Storage/storageAccounts","location":"westeurope","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-22T22:18:07.1937355Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-22T22:18:07.1937355Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-04-29T06:55:06.4412159Z","primaryEndpoints":{"blob":"https://foostore12978.blob.core.windows.net/","queue":"https://foostore12978.queue.core.windows.net/","table":"https://foostore12978.table.core.windows.net/","file":"https://foostore12978.file.core.windows.net/"},"primaryLocation":"westeurope","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"BlobStorage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/t-chwong/providers/Microsoft.Storage/storageAccounts/tchwong","name":"tchwong","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-01T18:07:07.4006066Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-01T18:07:07.4006066Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-03-01T18:07:07.3381076Z","primaryEndpoints":{"blob":"https://tchwong.blob.core.windows.net/","table":"https://tchwong.table.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestlab1/providers/Microsoft.Storage/storageAccounts/acliautomationlab8902","name":"acliautomationlab8902","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{"hidden-DevTestLabs-LabUId":"ca9ec547-32c5-422d-b3d2-25906ed71959"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T16:51:47.2662871Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T16:51:47.2662871Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T16:51:47.2194106Z","primaryEndpoints":{"blob":"https://acliautomationlab8902.blob.core.windows.net/","queue":"https://acliautomationlab8902.queue.core.windows.net/","table":"https://acliautomationlab8902.table.core.windows.net/","file":"https://acliautomationlab8902.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"identity":{"principalId":"ebc8557b-5159-4db6-8b04-699759875130","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgls6pde2luhubksnkjxebnrqthsdi6dcfpxcrhlmgnvdkkimk6b2usub6ehq3ocrsm/providers/Microsoft.Storage/storageAccounts/clitesttrevle6ezqkjtfdl3","name":"clitesttrevle6ezqkjtfdl3","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-14T22:32:56.5552622Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-14T22:32:56.5552622Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-14T22:32:56.5084099Z","primaryEndpoints":{"blob":"https://clitesttrevle6ezqkjtfdl3.blob.core.windows.net/","queue":"https://clitesttrevle6ezqkjtfdl3.queue.core.windows.net/","table":"https://clitesttrevle6ezqkjtfdl3.table.core.windows.net/","file":"https://clitesttrevle6ezqkjtfdl3.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/lmazuel-testfunction-msi/providers/Microsoft.Storage/storageAccounts/lmazueltestfuncbbd8","name":"lmazueltestfuncbbd8","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1691771Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1691771Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-10-11T19:03:26.3781645Z","primaryEndpoints":{"blob":"https://lmazueltestfuncbbd8.blob.core.windows.net/","queue":"https://lmazueltestfuncbbd8.queue.core.windows.net/","table":"https://lmazueltestfuncbbd8.table.core.windows.net/","file":"https://lmazueltestfuncbbd8.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cloud-shell-storage-southcentralus/providers/Microsoft.Storage/storageAccounts/cs700977cdb163fx435fx9c3","name":"cs700977cdb163fx435fx9c3","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{"ms-resource-usage":"azure-cloud-shell"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1691771Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1691771Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-08-09T21:59:02.7061936Z","primaryEndpoints":{"blob":"https://cs700977cdb163fx435fx9c3.blob.core.windows.net/","queue":"https://cs700977cdb163fx435fx9c3.queue.core.windows.net/","table":"https://cs700977cdb163fx435fx9c3.table.core.windows.net/","file":"https://cs700977cdb163fx435fx9c3.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/t-chwong/providers/Microsoft.Storage/storageAccounts/tchwongdiag300","name":"tchwongdiag300","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-20T18:15:54.9483325Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-20T18:15:54.9483325Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-20T18:15:54.8858351Z","primaryEndpoints":{"blob":"https://tchwongdiag300.blob.core.windows.net/","queue":"https://tchwongdiag300.queue.core.windows.net/","table":"https://tchwongdiag300.table.core.windows.net/","file":"https://tchwongdiag300.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/azurefunctions-southcentralus/providers/Microsoft.Storage/storageAccounts/azurefunctions2e2e624d","name":"azurefunctions2e2e624d","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1535349Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1535349Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-22T21:04:32.5702152Z","primaryEndpoints":{"blob":"https://azurefunctions2e2e624d.blob.core.windows.net/","queue":"https://azurefunctions2e2e624d.queue.core.windows.net/","table":"https://azurefunctions2e2e624d.table.core.windows.net/","file":"https://azurefunctions2e2e624d.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available","secondaryLocation":"northcentralus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup2/providers/Microsoft.Storage/storageAccounts/wilxstorage0","name":"wilxstorage0","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-13T01:05:28.4648959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-13T01:05:28.4648959Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-04-13T01:05:28.4023820Z","primaryEndpoints":{"blob":"https://wilxstorage0.blob.core.windows.net/","queue":"https://wilxstorage0.queue.core.windows.net/","table":"https://wilxstorage0.table.core.windows.net/","file":"https://wilxstorage0.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgmr6jo34yofyafj3n6gjbhrgmrd6pwgguthc2u235qfle6y6ztyzrlkuqn544s7cop/providers/Microsoft.Storage/storageAccounts/clitestnlmd52jlcmr4ce7b4","name":"clitestnlmd52jlcmr4ce7b4","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T20:14:07.3500611Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T20:14:07.3500611Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T20:14:07.3188286Z","primaryEndpoints":{"blob":"https://clitestnlmd52jlcmr4ce7b4.blob.core.windows.net/","queue":"https://clitestnlmd52jlcmr4ce7b4.queue.core.windows.net/","table":"https://clitestnlmd52jlcmr4ce7b4.table.core.windows.net/","file":"https://clitestnlmd52jlcmr4ce7b4.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup3/providers/Microsoft.Storage/storageAccounts/wilxstorageworm","name":"wilxstorageworm","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-13T22:36:53.1534839Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-13T22:36:53.1534839Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-13T22:36:53.0909769Z","primaryEndpoints":{"blob":"https://wilxstorageworm.blob.core.windows.net/","queue":"https://wilxstorageworm.queue.core.windows.net/","table":"https://wilxstorageworm.table.core.windows.net/","file":"https://wilxstorageworm.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available","secondaryLocation":"centraluseuap","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorageworm-secondary.blob.core.windows.net/","queue":"https://wilxstorageworm-secondary.queue.core.windows.net/","table":"https://wilxstorageworm-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg326oxnqqn33y3n42vz6x5xol5rvvw3z4o6tladwwtkmcntnsxhhxxtddtrxwm2edj/providers/Microsoft.Storage/storageAccounts/clitestjwzkdsfuou3niutbd","name":"clitestjwzkdsfuou3niutbd","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T20:07:33.1021018Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T20:07:33.1021018Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T20:07:33.0552270Z","primaryEndpoints":{"blob":"https://clitestjwzkdsfuou3niutbd.blob.core.windows.net/","queue":"https://clitestjwzkdsfuou3niutbd.queue.core.windows.net/","table":"https://clitestjwzkdsfuou3niutbd.table.core.windows.net/","file":"https://clitestjwzkdsfuou3niutbd.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgldagdmcl4pklmwzmr3wftx2kidhw7johz6d7tl6m7raetzzfhpqhrfffu5vwqtfxo/providers/Microsoft.Storage/storageAccounts/clitestt6pqb7xneswrh2sp6","name":"clitestt6pqb7xneswrh2sp6","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T17:51:14.8730435Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T17:51:14.8730435Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T17:51:14.8105336Z","primaryEndpoints":{"blob":"https://clitestt6pqb7xneswrh2sp6.blob.core.windows.net/","queue":"https://clitestt6pqb7xneswrh2sp6.queue.core.windows.net/","table":"https://clitestt6pqb7xneswrh2sp6.table.core.windows.net/","file":"https://clitestt6pqb7xneswrh2sp6.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgf3er5m4irbxsxhyil42jxq3t5ehzphmdzn2gortdlrzyw4i6tlgswx2xrcgldp6oh/providers/Microsoft.Storage/storageAccounts/clitestpabilv4yd6qxvguml","name":"clitestpabilv4yd6qxvguml","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T19:20:22.2758006Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T19:20:22.2758006Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T19:20:22.2445526Z","primaryEndpoints":{"blob":"https://clitestpabilv4yd6qxvguml.blob.core.windows.net/","queue":"https://clitestpabilv4yd6qxvguml.queue.core.windows.net/","table":"https://clitestpabilv4yd6qxvguml.table.core.windows.net/","file":"https://clitestpabilv4yd6qxvguml.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgwxiadyatfxsixayqfinia7ybjwo5cfoyw65qpuna3alx3x2diwukx4tkcpwir2mbq/providers/Microsoft.Storage/storageAccounts/clitesta2lvllqz23rgasyf7","name":"clitesta2lvllqz23rgasyf7","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T17:57:25.6818153Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T17:57:25.6818153Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T17:57:25.6193002Z","primaryEndpoints":{"blob":"https://clitesta2lvllqz23rgasyf7.blob.core.windows.net/","queue":"https://clitesta2lvllqz23rgasyf7.queue.core.windows.net/","table":"https://clitesta2lvllqz23rgasyf7.table.core.windows.net/","file":"https://clitesta2lvllqz23rgasyf7.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgoo2qxqtbb56w7uujqzhodrozdh7fxg5wxscql4ndybxkardgqzqvheltadic2zoxf/providers/Microsoft.Storage/storageAccounts/clitestfyixx74gs3loj3isf","name":"clitestfyixx74gs3loj3isf","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T20:34:26.6293927Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T20:34:26.6293927Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T20:34:26.5668681Z","primaryEndpoints":{"blob":"https://clitestfyixx74gs3loj3isf.blob.core.windows.net/","queue":"https://clitestfyixx74gs3loj3isf.queue.core.windows.net/","table":"https://clitestfyixx74gs3loj3isf.table.core.windows.net/","file":"https://clitestfyixx74gs3loj3isf.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgd5ygu6mbq43qw57ncgznekmhwaqlrowjc6dggyk2h6cfwioigvtt3bg7ayqckcwvk/providers/Microsoft.Storage/storageAccounts/clitestixsogcl5p5af5w2p3","name":"clitestixsogcl5p5af5w2p3","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T18:00:02.2397791Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T18:00:02.2397791Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T18:00:02.2087326Z","primaryEndpoints":{"blob":"https://clitestixsogcl5p5af5w2p3.blob.core.windows.net/","queue":"https://clitestixsogcl5p5af5w2p3.queue.core.windows.net/","table":"https://clitestixsogcl5p5af5w2p3.table.core.windows.net/","file":"https://clitestixsogcl5p5af5w2p3.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup3/providers/Microsoft.Storage/storageAccounts/wilxstorageblah","name":"wilxstorageblah","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-17T20:06:51.4259719Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-17T20:06:51.4259719Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-17T20:06:51.3790974Z","primaryEndpoints":{"blob":"https://wilxstorageblah.blob.core.windows.net/","queue":"https://wilxstorageblah.queue.core.windows.net/","table":"https://wilxstorageblah.table.core.windows.net/","file":"https://wilxstorageblah.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available","secondaryLocation":"centraluseuap","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorageblah-secondary.blob.core.windows.net/","queue":"https://wilxstorageblah-secondary.queue.core.windows.net/","table":"https://wilxstorageblah-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgeyg7p46zydk24opv23uowejjybhvp2nqcyqpnmknbs7o3w5c3tocuuygkogbvxz5f/providers/Microsoft.Storage/storageAccounts/clitestcrdofae6jvibomf2w","name":"clitestcrdofae6jvibomf2w","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-20T01:19:55.8214506Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-20T01:19:55.8214506Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-20T01:19:55.7120798Z","primaryEndpoints":{"blob":"https://clitestcrdofae6jvibomf2w.blob.core.windows.net/","queue":"https://clitestcrdofae6jvibomf2w.queue.core.windows.net/","table":"https://clitestcrdofae6jvibomf2w.table.core.windows.net/","file":"https://clitestcrdofae6jvibomf2w.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgeblmtd6pv6car44ga6qwvicwjyuxydhhkaharam4nad6uekgqgm2uiisw7v4a3czx/providers/Microsoft.Storage/storageAccounts/clitestcdx4bwlcvgviotc2p","name":"clitestcdx4bwlcvgviotc2p","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T22:26:49.0369320Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T22:26:49.0369320Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T22:26:48.9744081Z","primaryEndpoints":{"blob":"https://clitestcdx4bwlcvgviotc2p.blob.core.windows.net/","queue":"https://clitestcdx4bwlcvgviotc2p.queue.core.windows.net/","table":"https://clitestcdx4bwlcvgviotc2p.table.core.windows.net/","file":"https://clitestcdx4bwlcvgviotc2p.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}}]}'} headers: cache-control: [no-cache] - content-length: ['112844'] + content-length: ['97462'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 21:34:42 GMT'] + date: ['Tue, 01 May 2018 21:45:46 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] vary: [Accept-Encoding] - x-ms-original-request-ids: [c85fabf5-0de5-42a8-a247-53b4577cbdf8, 677dd49b-5673-419e-bd9f-f9561d778358, - 0653d2e6-0f7d-4288-be2e-61326548386d, 110703bf-8681-4bd3-a54d-56ade7539107, - 37aca02e-507c-4085-89e9-faba778c1ce6] + x-content-type-options: [nosniff] + x-ms-original-request-ids: [400f9403-e5f6-4d40-b54d-a8aae7192afa, 8bac4d5c-7584-4404-84a4-778348381883, + 4d3468d9-85e4-4ffd-a61e-19dfb6034ce0, d2a889bb-f2b1-41bc-ad2f-4387bfb944e3, + 30157c0f-ad4b-4c0d-b00f-fe99e47d72dc, bfc07f5d-948d-4185-9b87-08514087ae0e, + c8991b8b-d539-4c43-a527-dba2be4efb47] status: {code: 200, message: OK} - request: body: null @@ -152,17 +159,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"J5jUEDgfRpsBRD+1YMqix8HkQTeQYw3cNMCovEFGuVu5wjlKg18YgmyE7tgz+6xWbi7CHfu8xeaukkBWNKLEDg==","permissions":"FULL"},{"keyName":"key2","value":"KmnoycxJZ2GyAcmyDuqCtNX4L6fvt/ZibesD3WBz+rOmAXkPJ4HqQJ+d8K485TFTHSKCoJ/vAWRO3xJTzcuoFQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"94uEIpJdQoFGvUpLq172W0WoJBW3KeymBQWjNIBcr123RxLVfRRVSCUUonj7bzAKTUI/gxPz4pB63bh6nuFp2w==","permissions":"FULL"},{"keyName":"key2","value":"K2uoQjVDL7nTil9ce1C8lxWta/FPE/5gqD/CL40AkFzidAFKmgam6IwToKaMYrXfEVywTfRKAwUflstPQEjwyQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 21:34:42 GMT'] + date: ['Tue, 01 May 2018 21:45:46 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -170,7 +177,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null @@ -182,8 +190,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -192,11 +200,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 21:34:42 GMT'] + date: ['Tue, 01 May 2018 21:45:46 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdUMlNON0szWkpTVzdIWVFHMldSSTVHNUxKQ1RBQVBZVU5RWHw2RUI5RUM5OEM0RkM3RjUwLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdWSFZLWkpZUUVDU1JGQ0pLMjRRQUJOR0RTNkwyUzdBR0lQUnxGQzNCREU0RDQyQ0MzMzg4LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] + x-content-type-options: [nosniff] x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account.yaml index d0dcffcf427..fc64e9493e6 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:45:47Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:45:47Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1183'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:00 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/0e3526e2-17c0-4402-9dd6-30eab4048d67?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/581bfbcc-2d7d-4095-89c4-5d546894db13?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1188'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/0e3526e2-17c0-4402-9dd6-30eab4048d67?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/581bfbcc-2d7d-4095-89c4-5d546894db13?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:17 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/0e3526e2-17c0-4402-9dd6-30eab4048d67?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/0e3526e2-17c0-4402-9dd6-30eab4048d67?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:00.8903104Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:49.5279899Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:35 GMT'] + date: ['Tue, 01 May 2018 21:46:06 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: 'b''{"name": "cli000002", "type": "Microsoft.Storage/storageAccounts"}''' @@ -121,25 +98,26 @@ interactions: Content-Length: ['81'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2017-10-01 response: - body: {string: '{"message":"The storage account named cli000002 is already taken.","nameAvailable":false,"reason":"AlreadyExists"} - - '} + body: {string: '{"nameAvailable":false,"reason":"AlreadyExists","message":"The + storage account named cli000002 is already taken."}'} headers: cache-control: [no-cache] - content-length: ['130'] + content-length: ['129'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:37 GMT'] + date: ['Tue, 01 May 2018 21:46:08 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-Azure-Storage-Resource-Provider/1.0, Microsoft-HTTPAPI/2.0] + server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,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] status: {code: 200, message: OK} - request: body: null @@ -150,17 +128,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts?api-version=2017-10-01 response: - body: {string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:00.8903104Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}]}'} + body: {string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:49.5279899Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}]}'} headers: cache-control: [no-cache] content-length: ['1243'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:37 GMT'] + date: ['Tue, 01 May 2018 21:46:08 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -168,6 +146,7 @@ interactions: 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: null @@ -178,17 +157,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:00.8903104Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:49.5279899Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:38 GMT'] + date: ['Tue, 01 May 2018 21:46:09 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -196,6 +175,7 @@ interactions: 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: null @@ -207,17 +187,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"ruaUMgyUOuxqdbOBlD7DS5qLiONImENw2MsjpGt3c3Rs0EEBxJl8J6xZfiORH40iUV9NVv7xtpOZNgVE9Geggg==","permissions":"FULL"},{"keyName":"key2","value":"8AhVR0hl97YRYDDs1V38HVAIbCb1PVdyT6cZAR0k1ZCzFq26qeUe4Cp9eZNJMyTxzrPUqafhizIjXWKyvC+UCQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"T71EfEyU6KGnY/hliBId6+qsi6a1ZDQCQh8bvoog/YurI/hmyXYNtzq594OdPK8WnobRNFfzWJCnLIdslt2/8A==","permissions":"FULL"},{"keyName":"key2","value":"Ko/+WC1OwMLOXzNX/zpSdM7UyRSkCoo2Id+sv66o4kDvUZutDMu313YlclEGg+dRdaEF7IXLDwB4V6HG7FrA8g==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:38 GMT'] + date: ['Tue, 01 May 2018 21:46:10 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -225,7 +205,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1189'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -236,17 +217,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:00.8903104Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:49.5279899Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:39 GMT'] + date: ['Tue, 01 May 2018 21:46:09 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -254,6 +235,7 @@ interactions: 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: '{"sku": {"name": "Standard_LRS"}, "tags": {"foo": "bar", "cat": ""}, "properties": @@ -269,17 +251,17 @@ interactions: Content-Length: ['349'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"foo":"bar","cat":""},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:00.8903104Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"foo":"bar","cat":""},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:49.5279899Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1251'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:39 GMT'] + date: ['Tue, 01 May 2018 21:46:10 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -287,7 +269,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1181'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null @@ -298,17 +281,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"foo":"bar","cat":""},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:00.8903104Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"foo":"bar","cat":""},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:49.5279899Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1251'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:40 GMT'] + date: ['Tue, 01 May 2018 21:46:10 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -316,6 +299,7 @@ interactions: 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: '{"sku": {"name": "Standard_GRS"}, "tags": {}, "properties": {"encryption": @@ -331,17 +315,17 @@ interactions: Content-Length: ['326'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:00.8903104Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:49.5279899Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:41 GMT'] + date: ['Tue, 01 May 2018 21:46:11 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -349,7 +333,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1195'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: null @@ -360,17 +345,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:00.8903104Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:49.5279899Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:41 GMT'] + date: ['Tue, 01 May 2018 21:46:12 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -378,6 +363,7 @@ interactions: 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: '{"sku": {"name": "Standard_GRS"}, "tags": {"test": "success"}, "properties": @@ -393,17 +379,17 @@ interactions: Content-Length: ['343'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"test":"success"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:00.9372089Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:00.8903104Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"test":"success"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:50.0435368Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:49.5279899Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1247'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:42 GMT'] + date: ['Tue, 01 May 2018 21:46:13 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -411,7 +397,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1187'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -423,7 +410,7 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 @@ -433,13 +420,14 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:44 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1188'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: 'b''{"name": "cli000002", "type": "Microsoft.Storage/storageAccounts"}''' @@ -451,25 +439,25 @@ interactions: Content-Length: ['81'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2017-10-01 response: - body: {string: '{"nameAvailable":true} - - '} + body: {string: '{"nameAvailable":true}'} headers: cache-control: [no-cache] - content-length: ['23'] + content-length: ['22'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:44 GMT'] + date: ['Tue, 01 May 2018 21:46:15 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-Azure-Storage-Resource-Provider/1.0, Microsoft-HTTPAPI/2.0] + server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,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] status: {code: 200, message: OK} - request: body: null @@ -481,8 +469,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -491,11 +479,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:46 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdZWVhUR05GMk9XRVA1VEg3RVdCQURLUDNKUEZTSUhKQVdGRnxDQTZCMDVEMjdCQ0Y2RDcwLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdaVktMTFlUN05JVElCQTNQWFRXVlBIR1BUUkU0WVRXUzdTRnwxOTZCRjcxNTg0RTVDRjcyLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1181'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account_v2.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account_v2.yaml index 5858821bd59..dd5fabbf40a 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account_v2.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account_v2.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "southcentralus", "tags": {"use": "az-test"}}' + body: '{"location": "southcentralus", "tags": {"product": "azurecli", "cause": + "automation", "date": "2018-05-01T21:46:16Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['58'] + Content-Length: ['118'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:46:16Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['336'] + content-length: ['392'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:47 GMT'] + date: ['Tue, 01 May 2018 21:46:17 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1189'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_RAGRS"}, "kind": "StorageV2", "location": "southcentralus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['137'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:48 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/0967b4da-f47a-46a1-be3a-51abbd85432d?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/9008c892-6042-487c-9297-aa126dbdd3a3?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1191'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1194'] status: {code: 202, message: Accepted} - request: body: null @@ -65,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/0967b4da-f47a-46a1-be3a-51abbd85432d?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/9008c892-6042-487c-9297-aa126dbdd3a3?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:48.6603755Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:48.6603755Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:48.6134706Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available","secondaryLocation":"northcentralus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://cli000002-secondary.blob.core.windows.net/","queue":"https://cli000002-secondary.queue.core.windows.net/","table":"https://cli000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:46:18.9026126Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:46:18.9026126Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-05-01T21:46:18.8245022Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available","secondaryLocation":"northcentralus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://cli000002-secondary.blob.core.windows.net/","queue":"https://cli000002-secondary.queue.core.windows.net/","table":"https://cli000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1591'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:11:06 GMT'] + date: ['Tue, 01 May 2018 21:46:36 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -83,6 +86,7 @@ interactions: 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: 'b''{"name": "cli000002", "type": "Microsoft.Storage/storageAccounts"}''' @@ -94,25 +98,26 @@ interactions: Content-Length: ['81'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2017-10-01 response: - body: {string: '{"message":"The storage account named cli000002 is already taken.","nameAvailable":false,"reason":"AlreadyExists"} - - '} + body: {string: '{"nameAvailable":false,"reason":"AlreadyExists","message":"The + storage account named cli000002 is already taken."}'} headers: cache-control: [no-cache] - content-length: ['130'] + content-length: ['129'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:11:07 GMT'] + date: ['Tue, 01 May 2018 21:46:37 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-Azure-Storage-Resource-Provider/1.0, Microsoft-HTTPAPI/2.0] + server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,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] status: {code: 200, message: OK} - request: body: null @@ -124,8 +129,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -134,11 +139,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:11:09 GMT'] + date: ['Tue, 01 May 2018 21:46:38 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdINE8zSkdDQ0dWTk1JRjI2TFdHT1VaSUdMNVpKSDQ3WkxJWHwwMDEyNkJCRjUzNkE2OUI4LVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkc3Q0xRTzZXQkJQQTIyT1NYTktTNERETEtJR1M2R1YzSU9WRnw3OEUxRTNGRDYyNjhDNkUwLVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1188'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account_with_assigned_identity.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account_with_assigned_identity.yaml index 2cd734fa2f4..eb91655aaba 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account_with_assigned_identity.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_create_storage_account_with_assigned_identity.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "southcentralus", "tags": {"use": "az-test"}}' + body: '{"location": "southcentralus", "tags": {"product": "azurecli", "cause": + "automation", "date": "2018-05-01T21:46:38Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['58'] + Content-Length: ['118'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:46:38Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['336'] + content-length: ['392'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:11:10 GMT'] + date: ['Tue, 01 May 2018 21:46:39 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1188'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 201, message: Created} - request: body: null @@ -35,22 +37,23 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:46:38Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['336'] + content-length: ['392'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:11:11 GMT'] + date: ['Tue, 01 May 2018 21:46:40 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] vary: [Accept-Encoding] + x-content-type-options: [nosniff] status: {code: 200, message: OK} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "southcentralus", @@ -64,7 +67,7 @@ interactions: Content-Length: ['173'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 @@ -74,14 +77,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:11:14 GMT'] + date: ['Tue, 01 May 2018 21:46:43 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/0dd5ff8d-fcd9-4d81-aed4-64578003c0a3?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/db07f4d6-1aa9-4a35-9e9f-ec92d48bf5c6?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} - request: body: null @@ -92,17 +96,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/0dd5ff8d-fcd9-4d81-aed4-64578003c0a3?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/db07f4d6-1aa9-4a35-9e9f-ec92d48bf5c6?monitor=true&api-version=2017-10-01 response: - body: {string: '{"identity":{"principalId":"fc7b1ff3-153f-422c-be6e-10fd0dbb2b53","tenantId":"54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:14.3377009Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:14.3377009Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:11:14.2908347Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} + body: {string: '{"identity":{"principalId":"953ecdf7-a1a2-4571-a45e-276b341fd399","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:46:43.4103371Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:46:43.4103371Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:46:43.3477952Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1387'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:11:32 GMT'] + date: ['Tue, 01 May 2018 21:47:01 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +114,7 @@ interactions: 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: null @@ -121,8 +126,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -131,11 +136,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:11:34 GMT'] + date: ['Tue, 01 May 2018 21:47:02 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdMRjRaWUlCSjY3NkNaN1VCRUZYTjZWSkpVSlRGN0VNUVpSM3w2RTkxNTE0MUQzMjFGRjU3LVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdaSlRLRDNBNEhZQkU3VlVCSlU3R0JVNVQzNkQzVFNVRTZDUnwxRjIxOURCNEZEODVDRUIyLVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1191'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_customer_managed_key.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_customer_managed_key.yaml index eb6113e1236..020aeea2207 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_customer_managed_key.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_customer_managed_key.yaml @@ -1,31 +1,32 @@ interactions: - request: - body: '{"location": "southcentralus", "tags": {"use": "az-test"}}' + body: '{"location": "southcentralus", "tags": {"product": "azurecli", "cause": + "automation", "date": "2018-05-01T21:47:03Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['58'] + Content-Length: ['118'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:47:03Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['336'] + content-length: ['392'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:45:14 GMT'] + date: ['Tue, 01 May 2018 21:47:04 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "southcentralus", @@ -37,9 +38,8 @@ interactions: Connection: [keep-alive] Content-Length: ['133'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -49,9 +49,9 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:45:16 GMT'] + date: ['Tue, 01 May 2018 21:47:05 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/475457db-2a94-478d-9557-cbf335778430?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/a9d3ebd1-4539-47e6-ae2c-ebd9ac8b7ed6?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] @@ -67,48 +67,18 @@ interactions: CommandName: [storage account create] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/475457db-2a94-478d-9557-cbf335778430?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/a9d3ebd1-4539-47e6-ae2c-ebd9ac8b7ed6?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:45:34 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/475457db-2a94-478d-9557-cbf335778430?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-content-type-options: [nosniff] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python - AZURECLI/2.0.30] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/475457db-2a94-478d-9557-cbf335778430?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-14T22:45:16.8101562Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:47:05.9065524Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1247'] content-type: [application/json] - date: ['Wed, 14 Mar 2018 22:45:51 GMT'] + date: ['Tue, 01 May 2018 21:47:22 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -127,19 +97,18 @@ interactions: Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"29iXmtApzwAgRU8RFPFc896ZSHW4hYGutTWNZn7RbmOnUZqC6mJDx5PbdrnPn/3Ta4DNTapCNNwo1GEWRe8rBw==","permissions":"FULL"},{"keyName":"key2","value":"idf7KpJ5ifYJoB9H83S6RZuA4HvGtt8QMFD5hJS9keCnWMx4OUfkLct1r5xzRRVB3yHyc/Ke+D/Hxa1v2Fi85w==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"rjXT1kvmeWybJWyFiYBHHDcL5lSdSWDPXj/jKH1+L/FnrP6CQrnFRWNhw4wE8fSQ6koOguSwVwAJOvZLhDliPg==","permissions":"FULL"},{"keyName":"key2","value":"GlYufNjT5f7xOlMIzKSJrB4IwD3vxFV8FE0C/4JyDM7Z1Gw6+jfnA+lFTiUDaFXmwnIE0GBLDbQUvjH1OsPJ9g==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Wed, 14 Mar 2018 22:45:52 GMT'] + date: ['Tue, 01 May 2018 21:47:23 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -148,7 +117,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null @@ -158,19 +127,19 @@ interactions: CommandName: [keyvault create] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:47:03Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['336'] + content-length: ['392'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:45:52 GMT'] + date: ['Tue, 01 May 2018 21:47:25 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] @@ -184,43 +153,36 @@ interactions: Accept-Encoding: ['gzip, deflate'] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 graphrbacmanagementclient/0.31.0 Azure-SDK-For-Python] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-graphrbac/0.40.0 Azure-SDK-For-Python] accept-language: [en-US] method: GET uri: https://graph.windows.net/00000000-0000-0000-0000-000000000000/me?api-version=1.6 response: - body: {string: '{"odata.metadata":"https://graph.windows.net/00000000-0000-0000-0000-000000000000/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element","odata.type":"Microsoft.DirectoryServices.User","objectType":"User","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","deletionTimestamp":null,"accountEnabled":true,"ageGroup":null,"assignedLicenses":[{"disabledPlans":[],"skuId":"b05e124f-c7cc-45a0-a6aa-8cf78c946968"},{"disabledPlans":["0b03f40b-c404-40c3-8651-2aceb74365fa","b650d915-9886-424b-a08d-633cede56f57","e95bec33-7c88-4a70-8e19-b10bd9d0c014","5dbe027f-2339-4123-9542-606e4d348a72","fe71d6c3-a2ea-4499-9778-da042bf08063","fafd7243-e5c1-4a3a-9e40-495efcb1d3c3"],"skuId":"ea126fc5-a19e-42e2-a731-da9d437bffcf"},{"disabledPlans":[],"skuId":"c7df2760-2c81-4ef7-b578-5b5392b571df"},{"disabledPlans":[],"skuId":"c5928f49-12ba-48f7-ada3-0d743a3601d5"},{"disabledPlans":["e95bec33-7c88-4a70-8e19-b10bd9d0c014","5dbe027f-2339-4123-9542-606e4d348a72"],"skuId":"f82a60b8-1ee3-4cfb-a4fe-1c6a53c2656c"},{"disabledPlans":[],"skuId":"d3b4fe1f-9992-4930-8acb-ca6ec609365e"},{"disabledPlans":[],"skuId":"c52ea49f-fe5d-4e95-93ba-1de91d380f89"}],"assignedPlans":[{"assignedTimestamp":"2018-01-09T10:23:23Z","capabilityStatus":"Enabled","service":"ProjectWorkManagement","servicePlanId":"b737dad2-2f6c-4c65-90e3-ca563267e8b9"},{"assignedTimestamp":"2018-01-01T00:45:04Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"fe71d6c3-a2ea-4499-9778-da042bf08063"},{"assignedTimestamp":"2018-01-01T00:45:04Z","capabilityStatus":"Enabled","service":"AADPremiumService","servicePlanId":"41781fb2-bc02-4b7c-bd55-b576c07bb09d"},{"assignedTimestamp":"2018-01-01T00:45:04Z","capabilityStatus":"Enabled","service":"MultiFactorService","servicePlanId":"8a256a2b-b617-496d-b51b-e76466e88db0"},{"assignedTimestamp":"2018-01-01T00:45:04Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"e95bec33-7c88-4a70-8e19-b10bd9d0c014"},{"assignedTimestamp":"2018-01-01T00:45:04Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"5dbe027f-2339-4123-9542-606e4d348a72"},{"assignedTimestamp":"2018-01-01T00:45:04Z","capabilityStatus":"Enabled","service":"MicrosoftOffice","servicePlanId":"fafd7243-e5c1-4a3a-9e40-495efcb1d3c3"},{"assignedTimestamp":"2017-12-31T09:05:59Z","capabilityStatus":"Deleted","service":"Adallom","servicePlanId":"932ad362-64a8-4783-9106-97849a1a30b9"},{"assignedTimestamp":"2017-12-16T12:54:56Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"2bdbaf8f-738f-4ac7-9234-3c3ee2ce7d0f"},{"assignedTimestamp":"2017-12-16T12:54:56Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"da792a53-cbc0-4184-a10d-e544dd34b3c1"},{"assignedTimestamp":"2017-12-16T12:54:56Z","capabilityStatus":"Enabled","service":"To-Do","servicePlanId":"3fb82609-8c27-4f7b-bd51-30634711ee67"},{"assignedTimestamp":"2017-12-16T12:54:56Z","capabilityStatus":"Enabled","service":"RMSOnline","servicePlanId":"5689bec4-755d-4753-8b61-40975025187c"},{"assignedTimestamp":"2017-12-16T12:54:56Z","capabilityStatus":"Enabled","service":"Adallom","servicePlanId":"2e2ddb96-6af9-4b1d-a3f0-d6ecfd22edb2"},{"assignedTimestamp":"2017-01-26T01:41:01Z","capabilityStatus":"Enabled","service":"Adallom","servicePlanId":"8c098270-9dd4-4350-9b30-ba4703f3b36b"},{"assignedTimestamp":"2017-10-07T03:10:17Z","capabilityStatus":"Enabled","service":"Netbreeze","servicePlanId":"03acaee3-9492-4f40-aed4-bcb6b32981b6"},{"assignedTimestamp":"2017-10-07T03:10:17Z","capabilityStatus":"Enabled","service":"RMSOnline","servicePlanId":"bea4c11e-220a-4e6d-8eb8-8ea15d019f90"},{"assignedTimestamp":"2017-10-07T03:10:17Z","capabilityStatus":"Enabled","service":"RMSOnline","servicePlanId":"6c57d4b6-3b23-47a5-9bc9-69f17b4947b3"},{"assignedTimestamp":"2017-10-07T03:10:17Z","capabilityStatus":"Enabled","service":"CRM","servicePlanId":"d56f3deb-50d8-465a-bedb-f079817ccac1"},{"assignedTimestamp":"2017-07-06T17:55:21Z","capabilityStatus":"Enabled","service":"MicrosoftCommunicationsOnline","servicePlanId":"4828c8ec-dc2e-4779-b502-87ac9ce28ab7"},{"assignedTimestamp":"2017-07-06T17:55:21Z","capabilityStatus":"Enabled","service":"MicrosoftCommunicationsOnline","servicePlanId":"3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Enabled","service":"TeamspaceAPI","servicePlanId":"57ff2da0-773e-42df-b2af-ffb7a2317929"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Deleted","service":"ProcessSimple","servicePlanId":"76846ad7-7776-4c40-a281-a386362dd1b9"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Deleted","service":"PowerAppsService","servicePlanId":"c68f8d98-5534-41c8-bf36-22fa496fa792"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Enabled","service":"YammerEnterprise","servicePlanId":"7547a3fe-08ee-4ccb-b430-5077c5041653"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Enabled","service":"Sway","servicePlanId":"a23b959c-7ce8-4e57-9140-b90eb88a9e97"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Enabled","service":"MicrosoftCommunicationsOnline","servicePlanId":"0feaeb32-d00e-4d66-bd5a-43b5b83db82c"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Enabled","service":"Deskless","servicePlanId":"8c7d2df8-86f0-4902-b2ed-a0458298f3b3"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Deleted","service":"MicrosoftStream","servicePlanId":"9e700747-8b1d-45e5-ab8d-ef187ceec156"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"efb87545-963c-4e0d-99df-69c6916d9eb0"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Enabled","service":"MicrosoftOffice","servicePlanId":"43de0ff5-c92c-492b-9116-175376d08c38"},{"assignedTimestamp":"2017-07-06T17:55:20Z","capabilityStatus":"Deleted","service":"OfficeForms","servicePlanId":"2789c901-c14e-48ab-a76a-be334d9d793a"},{"assignedTimestamp":"2017-07-06T17:55:19Z","capabilityStatus":"Enabled","service":"OfficeForms","servicePlanId":"e212cbc7-0961-4c40-9825-01117710dcb1"},{"assignedTimestamp":"2017-07-06T17:55:19Z","capabilityStatus":"Enabled","service":"OfficeForms","servicePlanId":"159f4cd6-e380-449f-a816-af1a9ef76344"},{"assignedTimestamp":"2017-06-11T11:19:06Z","capabilityStatus":"Enabled","service":"MicrosoftStream","servicePlanId":"6c6042f5-6f01-4d67-b8c1-eb99d36eed3e"},{"assignedTimestamp":"2017-06-11T11:19:06Z","capabilityStatus":"Enabled","service":"AADPremiumService","servicePlanId":"eec0eb4f-6444-4f95-aba0-50c24d67f998"},{"assignedTimestamp":"2017-06-11T11:19:06Z","capabilityStatus":"Enabled","service":"SCO","servicePlanId":"c1ec4a95-1f05-45b3-a911-aa3fa01094f5"},{"assignedTimestamp":"2017-05-13T02:29:46Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"8e0c0a52-6a6c-4d40-8370-dd62790dcd70"},{"assignedTimestamp":"2017-01-26T01:41:01Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"9f431833-0334-42de-a7dc-70aa40db46db"},{"assignedTimestamp":"2017-01-26T01:41:01Z","capabilityStatus":"Enabled","service":"PowerBI","servicePlanId":"70d33638-9c74-4d01-bfd3-562de28bd4ba"},{"assignedTimestamp":"2017-01-26T01:41:01Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"4de31727-a228-4ec3-a5bf-8e45b5ca48cc"},{"assignedTimestamp":"2017-01-26T01:41:01Z","capabilityStatus":"Deleted","service":"SharePoint","servicePlanId":"c4048e79-4474-4c74-ba9b-c31ff225e511"},{"assignedTimestamp":"2017-01-26T01:41:01Z","capabilityStatus":"Deleted","service":"AzureAnalysis","servicePlanId":"2049e525-b859-401b-b2a0-e0a31c4b1fe4"},{"assignedTimestamp":"2017-01-26T01:41:01Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"34c0d7a0-a70f-4668-9238-47f9fc208882"},{"assignedTimestamp":"2016-12-19T04:25:33Z","capabilityStatus":"Deleted","service":"PowerBI","servicePlanId":"fc0a60aa-feee-4746-a0e3-aecfe81a38dd"},{"assignedTimestamp":"2016-12-19T04:25:33Z","capabilityStatus":"Deleted","service":"SharePoint","servicePlanId":"2125cfd7-2110-4567-83c4-c1cd5275163d"},{"assignedTimestamp":"2016-11-19T14:33:33Z","capabilityStatus":"Enabled","service":"PowerAppsService","servicePlanId":"9c0dab89-a30c-4117-86e7-97bda240acd2"},{"assignedTimestamp":"2016-11-19T14:33:33Z","capabilityStatus":"Enabled","service":"ProcessSimple","servicePlanId":"07699545-9485-468e-95b6-2fca3738be01"},{"assignedTimestamp":"2012-10-17T12:12:58Z","capabilityStatus":"Enabled","service":"MicrosoftOffice","servicePlanId":"663a804f-1c30-4ff0-9915-9db84f0d1cea"},{"assignedTimestamp":"2015-07-30T05:29:29Z","capabilityStatus":"Enabled","service":"MicrosoftCommunicationsOnline","servicePlanId":"5a10155d-f5c1-411a-a8ec-e99aae125390"},{"assignedTimestamp":"2015-07-30T05:29:29Z","capabilityStatus":"Deleted","service":"MicrosoftCommunicationsOnline","servicePlanId":"27216c54-caf8-4d0d-97e2-517afb5c08f6"}],"city":"REDMOND","companyName":"MICROSOFT","consentProvidedForMinor":null,"country":null,"creationType":null,"department":"Azure - and Web","dirSyncEnabled":true,"displayName":"Troy Dai","employeeId":null,"facsimileTelephoneNumber":null,"givenName":"Troy","immutableId":"461912","isCompromised":null,"jobTitle":"SENIOR - SOFTWARE ENGINEER","lastDirSyncTime":"2018-02-23T23:05:29Z","legalAgeGroupClassification":null,"mail":"trdai@microsoft.com","mailNickname":"trdai","mobile":null,"onPremisesDistinguishedName":null,"onPremisesSecurityIdentifier":"S-1-5-21-2127521184-1604012920-1887927527-7314606","otherMails":[],"passwordPolicies":"DisablePasswordExpiration","passwordProfile":null,"physicalDeliveryOfficeName":"18/2300FL","postalCode":null,"preferredLanguage":null,"provisionedPlans":[{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"Netbreeze"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"CRM"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftCommunicationsOnline"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftCommunicationsOnline"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftCommunicationsOnline"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"},{"capabilityStatus":"Deleted","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"},{"capabilityStatus":"Deleted","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftOffice"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftOffice"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftCommunicationsOnline"},{"capabilityStatus":"Deleted","provisioningStatus":"Success","service":"MicrosoftCommunicationsOnline"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftOffice"}],"provisioningErrors":[],"proxyAddresses":["X500:/O=Nokia/OU=HUB/cn=Recipients/cn=trdai","X500:/o=SDF/ou=Exchange - Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=sdflabs.com-51490-Troy - Dai","X500:/o=microsoft/ou=First Administrative Group/cn=Recipients/cn=trdai","X500:/o=microsoft/ou=External - (FYDIBOHF25SPDLT)/cn=Recipients/cn=a84f62fabe9b4550aaeda1239b1a98a0","X500:/o=microsoft/ou=Exchange - Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=trdai","X500:/o=SDF/ou=Exchange - Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=trdaif6bab3c01c","X500:/o=SDF/ou=Exchange - Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=51490-trdai_7c9c85843c","X500:/o=SDF/ou=Exchange - Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=51490-trdai_1ff209dd2f","X500:/o=MSNBC/ou=Servers/cn=Recipients/cn=trdai","X500:/o=ExchangeLabs/ou=Exchange - Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=trdai8d49b0283b","X500:/o=ExchangeLabs/ou=Exchange - Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=microsoft.onmicrosoft.com-55760-Troy - Dai","smtp:trdai@064d.mgd.microsoft.com","X500:/o=MMS/ou=Exchange Administrative - Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=Troy Dai0deb72db-4e3f-41b7-b53f-0e30c68d0958","SMTP:trdai@microsoft.com","x500:/o=microsoft/ou=Exchange - Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=Troy Dai","smtp:trdai@service.microsoft.com"],"refreshTokensValidFromDateTime":"2018-02-23T22:01:13Z","showInAddressList":true,"signInNames":[],"sipProxyAddress":"trdai@microsoft.com","state":null,"streetAddress":null,"surname":"Dai","telephoneNumber":"+1 - (425) 7062263","thumbnailPhoto@odata.mediaContentType":"image/Jpeg","usageLocation":"US","userIdentities":[],"userPrincipalName":"trdai@microsoft.com","userType":null,"extension_18e31482d3fb4a8ea958aa96b662f508_SupervisorInd":"N","extension_18e31482d3fb4a8ea958aa96b662f508_BuildingName":"18","extension_18e31482d3fb4a8ea958aa96b662f508_BuildingID":"17","extension_18e31482d3fb4a8ea958aa96b662f508_ReportsToPersonnelNbr":"186027","extension_18e31482d3fb4a8ea958aa96b662f508_ReportsToFullName":"Diwan, - Mayuri","extension_18e31482d3fb4a8ea958aa96b662f508_ReportsToEmailName":"MAYURID","extension_18e31482d3fb4a8ea958aa96b662f508_AddressLine1":"1 - Microsoft Way","extension_18e31482d3fb4a8ea958aa96b662f508_CityName":"REDMOND","extension_18e31482d3fb4a8ea958aa96b662f508_CompanyCode":"1010","extension_18e31482d3fb4a8ea958aa96b662f508_CostCenterCode":"10040929","extension_18e31482d3fb4a8ea958aa96b662f508_CountryShortCode":"US","extension_18e31482d3fb4a8ea958aa96b662f508_LocationAreaCode":"US","extension_18e31482d3fb4a8ea958aa96b662f508_PersonnelNumber":"461912","extension_18e31482d3fb4a8ea958aa96b662f508_PositionNumber":"19376","extension_18e31482d3fb4a8ea958aa96b662f508_ProfitCenterCode":"P10040929","extension_18e31482d3fb4a8ea958aa96b662f508_StateProvinceCode":"WA","extension_18e31482d3fb4a8ea958aa96b662f508_ZipCode":"98052"}'} + body: {string: '{"odata.metadata":"https://graph.windows.net/00000000-0000-0000-0000-000000000000/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element","odata.type":"Microsoft.DirectoryServices.User","objectType":"User","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","deletionTimestamp":null,"accountEnabled":true,"ageGroup":null,"assignedLicenses":[{"disabledPlans":[],"skuId":"488ba24a-39a9-4473-8ee5-19291e71b002"},{"disabledPlans":[],"skuId":"b05e124f-c7cc-45a0-a6aa-8cf78c946968"},{"disabledPlans":["0b03f40b-c404-40c3-8651-2aceb74365fa","b650d915-9886-424b-a08d-633cede56f57","e95bec33-7c88-4a70-8e19-b10bd9d0c014","5dbe027f-2339-4123-9542-606e4d348a72","fe71d6c3-a2ea-4499-9778-da042bf08063","fafd7243-e5c1-4a3a-9e40-495efcb1d3c3"],"skuId":"ea126fc5-a19e-42e2-a731-da9d437bffcf"},{"disabledPlans":[],"skuId":"c7df2760-2c81-4ef7-b578-5b5392b571df"},{"disabledPlans":["e95bec33-7c88-4a70-8e19-b10bd9d0c014","5dbe027f-2339-4123-9542-606e4d348a72"],"skuId":"f82a60b8-1ee3-4cfb-a4fe-1c6a53c2656c"},{"disabledPlans":[],"skuId":"c5928f49-12ba-48f7-ada3-0d743a3601d5"},{"disabledPlans":[],"skuId":"c52ea49f-fe5d-4e95-93ba-1de91d380f89"}],"assignedPlans":[{"assignedTimestamp":"2018-04-24T12:19:11Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"fe71d6c3-a2ea-4499-9778-da042bf08063"},{"assignedTimestamp":"2018-04-24T12:19:11Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"2bdbaf8f-738f-4ac7-9234-3c3ee2ce7d0f"},{"assignedTimestamp":"2018-04-24T12:19:11Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"da792a53-cbc0-4184-a10d-e544dd34b3c1"},{"assignedTimestamp":"2018-04-24T12:19:11Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"e95bec33-7c88-4a70-8e19-b10bd9d0c014"},{"assignedTimestamp":"2018-04-24T12:19:11Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"5dbe027f-2339-4123-9542-606e4d348a72"},{"assignedTimestamp":"2018-03-23T21:16:30Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"fe71d6c3-a2ea-4499-9778-da042bf08063"},{"assignedTimestamp":"2018-03-23T21:16:30Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"e95bec33-7c88-4a70-8e19-b10bd9d0c014"},{"assignedTimestamp":"2018-03-23T21:16:30Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"5dbe027f-2339-4123-9542-606e4d348a72"},{"assignedTimestamp":"2018-03-23T21:16:30Z","capabilityStatus":"Deleted","service":"MicrosoftStream","servicePlanId":"acffdce6-c30f-4dc2-81c0-372e33c515ec"},{"assignedTimestamp":"2018-03-23T21:16:30Z","capabilityStatus":"Enabled","service":"MicrosoftOffice","servicePlanId":"fafd7243-e5c1-4a3a-9e40-495efcb1d3c3"},{"assignedTimestamp":"2018-03-17T19:15:37Z","capabilityStatus":"Enabled","service":"WindowsDefenderATP","servicePlanId":"871d91ec-ec1a-452b-a83f-bd76c7d770ef"},{"assignedTimestamp":"2018-03-17T19:15:37Z","capabilityStatus":"Enabled","service":"AzureAdvancedThreatAnalytics","servicePlanId":"14ab5db5-e6c4-4b20-b4bc-13e36fd2227f"},{"assignedTimestamp":"2018-03-17T19:15:37Z","capabilityStatus":"Enabled","service":"Windows","servicePlanId":"e7c91390-7625-45be-94e0-e16907e03118"},{"assignedTimestamp":"2018-01-09T12:24:45Z","capabilityStatus":"Enabled","service":"ProjectWorkManagement","servicePlanId":"b737dad2-2f6c-4c65-90e3-ca563267e8b9"},{"assignedTimestamp":"2018-01-01T06:15:34Z","capabilityStatus":"Enabled","service":"AADPremiumService","servicePlanId":"41781fb2-bc02-4b7c-bd55-b576c07bb09d"},{"assignedTimestamp":"2018-01-01T06:15:34Z","capabilityStatus":"Enabled","service":"MultiFactorService","servicePlanId":"8a256a2b-b617-496d-b51b-e76466e88db0"},{"assignedTimestamp":"2017-12-31T18:38:48Z","capabilityStatus":"Deleted","service":"Adallom","servicePlanId":"932ad362-64a8-4783-9106-97849a1a30b9"},{"assignedTimestamp":"2017-12-14T05:01:45Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"2bdbaf8f-738f-4ac7-9234-3c3ee2ce7d0f"},{"assignedTimestamp":"2017-12-14T05:01:45Z","capabilityStatus":"Enabled","service":"SharePoint","servicePlanId":"da792a53-cbc0-4184-a10d-e544dd34b3c1"},{"assignedTimestamp":"2017-12-14T05:01:45Z","capabilityStatus":"Enabled","service":"To-Do","servicePlanId":"3fb82609-8c27-4f7b-bd51-30634711ee67"},{"assignedTimestamp":"2017-12-14T05:01:45Z","capabilityStatus":"Enabled","service":"RMSOnline","servicePlanId":"5689bec4-755d-4753-8b61-40975025187c"},{"assignedTimestamp":"2017-12-14T05:01:45Z","capabilityStatus":"Enabled","service":"Adallom","servicePlanId":"2e2ddb96-6af9-4b1d-a3f0-d6ecfd22edb2"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"Adallom","servicePlanId":"8c098270-9dd4-4350-9b30-ba4703f3b36b"},{"assignedTimestamp":"2017-10-07T05:29:38Z","capabilityStatus":"Enabled","service":"Netbreeze","servicePlanId":"03acaee3-9492-4f40-aed4-bcb6b32981b6"},{"assignedTimestamp":"2017-10-07T05:29:38Z","capabilityStatus":"Enabled","service":"RMSOnline","servicePlanId":"bea4c11e-220a-4e6d-8eb8-8ea15d019f90"},{"assignedTimestamp":"2017-10-07T05:29:38Z","capabilityStatus":"Enabled","service":"RMSOnline","servicePlanId":"6c57d4b6-3b23-47a5-9bc9-69f17b4947b3"},{"assignedTimestamp":"2017-10-07T05:29:38Z","capabilityStatus":"Enabled","service":"CRM","servicePlanId":"d56f3deb-50d8-465a-bedb-f079817ccac1"},{"assignedTimestamp":"2017-08-18T15:14:38Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"efb87545-963c-4e0d-99df-69c6916d9eb0"},{"assignedTimestamp":"2017-08-18T15:14:38Z","capabilityStatus":"Enabled","service":"MicrosoftCommunicationsOnline","servicePlanId":"3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40"},{"assignedTimestamp":"2017-08-18T15:14:38Z","capabilityStatus":"Enabled","service":"MicrosoftCommunicationsOnline","servicePlanId":"4828c8ec-dc2e-4779-b502-87ac9ce28ab7"},{"assignedTimestamp":"2017-08-18T15:14:38Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"34c0d7a0-a70f-4668-9238-47f9fc208882"},{"assignedTimestamp":"2017-08-18T15:14:38Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"9f431833-0334-42de-a7dc-70aa40db46db"},{"assignedTimestamp":"2017-08-18T15:14:38Z","capabilityStatus":"Enabled","service":"Deskless","servicePlanId":"8c7d2df8-86f0-4902-b2ed-a0458298f3b3"},{"assignedTimestamp":"2017-08-18T15:14:38Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"8e0c0a52-6a6c-4d40-8370-dd62790dcd70"},{"assignedTimestamp":"2017-08-18T15:14:38Z","capabilityStatus":"Enabled","service":"MicrosoftStream","servicePlanId":"6c6042f5-6f01-4d67-b8c1-eb99d36eed3e"},{"assignedTimestamp":"2017-08-18T15:14:38Z","capabilityStatus":"Enabled","service":"OfficeForms","servicePlanId":"e212cbc7-0961-4c40-9825-01117710dcb1"},{"assignedTimestamp":"2017-08-04T07:20:51Z","capabilityStatus":"Enabled","service":"AADPremiumService","servicePlanId":"eec0eb4f-6444-4f95-aba0-50c24d67f998"},{"assignedTimestamp":"2017-08-04T07:20:51Z","capabilityStatus":"Enabled","service":"SCO","servicePlanId":"c1ec4a95-1f05-45b3-a911-aa3fa01094f5"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"MicrosoftCommunicationsOnline","servicePlanId":"0feaeb32-d00e-4d66-bd5a-43b5b83db82c"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"ProcessSimple","servicePlanId":"07699545-9485-468e-95b6-2fca3738be01"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"Sway","servicePlanId":"a23b959c-7ce8-4e57-9140-b90eb88a9e97"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"PowerBI","servicePlanId":"70d33638-9c74-4d01-bfd3-562de28bd4ba"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"exchange","servicePlanId":"4de31727-a228-4ec3-a5bf-8e45b5ca48cc"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"MicrosoftOffice","servicePlanId":"663a804f-1c30-4ff0-9915-9db84f0d1cea"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"TeamspaceAPI","servicePlanId":"57ff2da0-773e-42df-b2af-ffb7a2317929"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"PowerAppsService","servicePlanId":"9c0dab89-a30c-4117-86e7-97bda240acd2"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"OfficeForms","servicePlanId":"159f4cd6-e380-449f-a816-af1a9ef76344"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"YammerEnterprise","servicePlanId":"7547a3fe-08ee-4ccb-b430-5077c5041653"},{"assignedTimestamp":"2017-08-04T02:23:56Z","capabilityStatus":"Enabled","service":"MicrosoftOffice","servicePlanId":"43de0ff5-c92c-492b-9116-175376d08c38"}],"city":"REDMOND","companyName":"MICROSOFT","consentProvidedForMinor":null,"country":null,"creationType":null,"department":"Azure + and Web","dirSyncEnabled":true,"displayName":"Willie Xu","employeeId":null,"facsimileTelephoneNumber":null,"givenName":"Willie","immutableId":"1241166","isCompromised":null,"jobTitle":"SOFTWARE + ENGINEER","lastDirSyncTime":"2018-04-14T15:06:56Z","legalAgeGroupClassification":null,"mail":"Willie.Xu@microsoft.com","mailNickname":"wilx","mobile":null,"onPremisesDistinguishedName":"CN=Willie + Xu,OU=UserAccounts,DC=redmond,DC=corp,DC=microsoft,DC=com","onPremisesSecurityIdentifier":"S-1-5-21-2127521184-1604012920-1887927527-28031824","otherMails":[],"passwordPolicies":"DisablePasswordExpiration","passwordProfile":null,"physicalDeliveryOfficeName":"18/2250FL","postalCode":null,"preferredLanguage":null,"provisionedPlans":[{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"SharePoint"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"Netbreeze"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"CRM"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftCommunicationsOnline"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftCommunicationsOnline"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"MicrosoftCommunicationsOnline"},{"capabilityStatus":"Enabled","provisioningStatus":"Success","service":"exchange"}],"provisioningErrors":[],"proxyAddresses":["x500:/o=ExchangeLabs/ou=Exchange + Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=73e4dc5a8858433681fcb300f98cd2db-Willie + Xu","X500:/o=microsoft/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=53ed7de51a1940ae94f43ae4b57643a4-Willie + Xu","X500:/o=MMS/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=55b110a31823461c9ce34dd1a3f445dc-Willie + Xu96c9fa53-17","X500:/o=microsoft/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=e2257f0925774064878e0ae17f94fdef-Willie + Xu","smtp:wilx@microsoft.onmicrosoft.com","smtp:wilx@service.microsoft.com","smtp:wilx@microsoft.com","SMTP:Willie.Xu@microsoft.com"],"refreshTokensValidFromDateTime":"2018-02-27T19:29:17Z","showInAddressList":null,"signInNames":[],"sipProxyAddress":"wilx@microsoft.com","state":null,"streetAddress":null,"surname":"Xu","telephoneNumber":null,"usageLocation":"US","userIdentities":[],"userPrincipalName":"wilx@microsoft.com","userType":"Member","extension_18e31482d3fb4a8ea958aa96b662f508_ZipCode":"98052","extension_18e31482d3fb4a8ea958aa96b662f508_SupervisorInd":"N","extension_18e31482d3fb4a8ea958aa96b662f508_StateProvinceCode":"WA","extension_18e31482d3fb4a8ea958aa96b662f508_ReportsToPersonnelNbr":"186027","extension_18e31482d3fb4a8ea958aa96b662f508_ReportsToFullName":"Diwan, + Mayuri","extension_18e31482d3fb4a8ea958aa96b662f508_ReportsToEmailName":"MAYURID","extension_18e31482d3fb4a8ea958aa96b662f508_ProfitCenterCode":"P10040929","extension_18e31482d3fb4a8ea958aa96b662f508_PositionNumber":"90656247","extension_18e31482d3fb4a8ea958aa96b662f508_LocationAreaCode":"US","extension_18e31482d3fb4a8ea958aa96b662f508_CountryShortCode":"US","extension_18e31482d3fb4a8ea958aa96b662f508_CostCenterCode":"10040929","extension_18e31482d3fb4a8ea958aa96b662f508_CompanyCode":"1010","extension_18e31482d3fb4a8ea958aa96b662f508_CityName":"REDMOND","extension_18e31482d3fb4a8ea958aa96b662f508_BuildingName":"18","extension_18e31482d3fb4a8ea958aa96b662f508_BuildingID":"17","extension_18e31482d3fb4a8ea958aa96b662f508_AddressLine1":"1 + Microsoft Way","extension_18e31482d3fb4a8ea958aa96b662f508_PersonnelNumber":"1241166"}'} headers: access-control-allow-origin: ['*'] cache-control: [no-cache] - content-length: ['14563'] + content-length: ['13487'] content-type: [application/json; odata=minimalmetadata; streaming=true; charset=utf-8] dataserviceversion: [3.0;] - date: ['Wed, 14 Mar 2018 22:45:53 GMT'] - duration: ['878137'] + date: ['Tue, 01 May 2018 21:47:26 GMT'] + duration: ['1254797'] expires: ['-1'] - ocp-aad-diagnostics-server-name: [ueBU+Ctw2NpjhaqIeDGmz36cCklGr4Ik3hSndonrJ8s=] - ocp-aad-session-key: [h-ou6CfY7RrfRo7vToOwUH_32odrFbJ9IYojtvtUR1Prlynw2xVjm0uMAUBGNY48W6jz5iwro_FuFfsnwiZGrdLwK7L7l5AAUXMlWgTP6EUEHfty4PiFjDjX3daZGAUd.4p7HXH8ub4gv1HKt41E47tD7csPk5CBTcXhjRz4oDOY] + ocp-aad-diagnostics-server-name: [itPlsAoHbG6osDHbVzYs2a+9kGEe205TaLepJuLRQYY=] + ocp-aad-session-key: [OgpqxwMSJJJizHeXqDwJ-bzGwpuqkBgQrFWBGCwdMMP-Z4AUSEIPeNeE3YiQTwaS4SxjS--Qk6Yj8Eoxu3pdpMw06vULma9DvW-BK4dIajLJtVq5Bg-GOTXzZsMOREsA.Vq3iqNRGq2xtGuJsX-zTrphAojKyhUjXgQNHAcYiTl4] pragma: [no-cache] - request-id: [52764719-c8a2-431d-9b57-378d3ec35f97] + request-id: [6b9e1fcd-901a-45f5-891a-a0547b042652] server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] x-aspnet-version: [4.0.30319] @@ -231,7 +193,7 @@ interactions: - request: body: '{"location": "southcentralus", "properties": {"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "sku": {"family": "A", "name": "standard"}, "accessPolicies": [{"tenantId": - "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": "cdf4ba39-6a56-45be-a72a-13ec9cdfee91", + "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": "4b1f6d49-d203-442f-bb23-06d98ab68f05", "permissions": {"keys": ["get", "create", "delete", "list", "update", "import", "backup", "restore", "recover"], "secrets": ["get", "list", "set", "delete", "backup", "restore", "recover"], "certificates": ["get", "list", "delete", "create", @@ -245,29 +207,29 @@ interactions: Connection: [keep-alive] Content-Length: ['754'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003?api-version=2016-10-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net","provisioningState":"RegisteringDns"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net","provisioningState":"RegisteringDns"}}'} headers: cache-control: [no-cache] content-length: ['1114'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:45:55 GMT'] + date: ['Tue, 01 May 2018 21:47:28 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.210] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-ms-keyvault-service-version: [1.0.0.215] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] x-powered-by: [ASP.NET] status: {code: 200, message: OK} - request: @@ -278,28 +240,28 @@ interactions: CommandName: [keyvault show] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003?api-version=2016-10-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} headers: cache-control: [no-cache] content-length: ['1115'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:45:57 GMT'] + date: ['Tue, 01 May 2018 21:47:29 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.210] + x-ms-keyvault-service-version: [1.0.0.215] x-powered-by: [ASP.NET] status: {code: 200, message: OK} - request: @@ -310,8 +272,8 @@ interactions: Connection: [keep-alive] Content-Length: ['47'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 keyvaultclient/0.3.7 Azure-SDK-For-Python] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 keyvaultclient/0.3.7 Azure-SDK-For-Python] accept-language: [en-US] method: POST uri: https://clitest000003.vault.azure.net/keys/testkey/create?api-version=2016-10-01 @@ -320,17 +282,18 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Wed, 14 Mar 2018 22:45:57 GMT'] + date: ['Tue, 01 May 2018 21:47:30 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000;includeSubDomains] www-authenticate: ['Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47", resource="https://vault.azure.net"'] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] + x-ms-keyvault-network-info: [addr=167.220.1.116;act_addr_fam=InterNetwork;] x-ms-keyvault-region: [southcentralus] - x-ms-keyvault-service-version: [1.0.0.841] + x-ms-keyvault-service-version: [1.0.0.847] x-powered-by: [ASP.NET] status: {code: 401, message: Unauthorized} - request: @@ -341,26 +304,27 @@ interactions: Connection: [keep-alive] Content-Length: ['47'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 keyvaultclient/0.3.7 Azure-SDK-For-Python] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 keyvaultclient/0.3.7 Azure-SDK-For-Python] accept-language: [en-US] method: POST uri: https://clitest000003.vault.azure.net/keys/testkey/create?api-version=2016-10-01 response: - body: {string: '{"key":{"kid":"https://clitest000003.vault.azure.net/keys/testkey/fff5a9c679664908a6675a10b9c8d952","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"qSSdSr77XJK9X6GDUX9wYDM_tWyBuYm4N5nliCs1UE5KgzDm-hs-ko-YndG1YFuf6AcXQBDftYaXN_AeCEtRkEyCMFtGeZ2FGOkLdattLm4paZAzUEN7_x4GFMVPI6-F052Vso-SswgvcqDo2PFLTv4_c6xDFHun0E12mwXfcI5nXeK5Awmvo4KiZUNvHBaldb1hEyqi-UR4L559Hf6ksMEnVCnPU7NO9o8Sq0dknnzFFAUVnWPGgLi6Ktka-ZYghPHdyl-2u1V1BOR0hzdg-ktFxRkmPWxqa048upiFxxdvpgwZWabEG1aw3TkckdwPMkn72TPgmNI5TTtLh896vw","e":"AQAB"},"attributes":{"enabled":true,"created":1521067558,"updated":1521067558,"recoveryLevel":"Purgeable"}}'} + body: {string: '{"key":{"kid":"https://clitest000003.vault.azure.net/keys/testkey/f99dcad9b19d4839be3296fd333700a9","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"r9OTl9V1DpLm1W8tKktiO6lSvXSDZaKGh8yamAJWaIk4yWvFm983fAsTys0Jr6xxauUVTg6tRXjhkDm45em4J8oRwdnDyYWkUWwl98EKZiSy0EvvcVK2e5wY3Q9aiIfRsBF2ctw9yu7g_ARtc7cMS2OPN-WVQutm8Sz5-NihxedjpktsXRjI224sAzlN2U_Qztow3d78i7T-3pbSNEX_4RL-iIbd4VFvzlT-qAA6vYhA5smXRCnK-piEVqpAW0vawx26UnRwxu-_T69LERBIBoRmnPFBznUyW7QRIWzm9c0ariEsSsDvom2FrCDvrl9T79AkJT3OFejpgY3T6xsuqw","e":"AQAB"},"attributes":{"enabled":true,"created":1525211251,"updated":1525211251,"recoveryLevel":"Purgeable"}}'} headers: cache-control: [no-cache] content-length: ['654'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:45:57 GMT'] + date: ['Tue, 01 May 2018 21:47:31 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000;includeSubDomains] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] + x-ms-keyvault-network-info: [addr=167.220.1.116;act_addr_fam=InterNetwork;] x-ms-keyvault-region: [southcentralus] - x-ms-keyvault-service-version: [1.0.0.841] + x-ms-keyvault-service-version: [1.0.0.847] x-powered-by: [ASP.NET] status: {code: 200, message: OK} - request: @@ -371,19 +335,18 @@ interactions: CommandName: [storage account update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-14T22:45:16.8101562Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:47:05.9065524Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1247'] content-type: [application/json] - date: ['Wed, 14 Mar 2018 22:45:58 GMT'] + date: ['Tue, 01 May 2018 21:47:32 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -406,19 +369,18 @@ interactions: Connection: [keep-alive] Content-Length: ['366'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"identity":{"principalId":"739fc607-0f9e-40c8-a69b-84bb547e3751","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-14T22:45:16.8101562Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} + body: {string: '{"identity":{"principalId":"f9dda2cf-e03f-4a7a-a8ea-7411041143de","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:47:05.9065524Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1387'] content-type: [application/json] - date: ['Wed, 14 Mar 2018 22:46:01 GMT'] + date: ['Tue, 01 May 2018 21:47:34 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -427,7 +389,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null @@ -437,42 +399,42 @@ interactions: CommandName: [keyvault set-policy] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003?api-version=2016-10-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} headers: cache-control: [no-cache] content-length: ['1115'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:46:02 GMT'] + date: ['Tue, 01 May 2018 21:47:35 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.210] + x-ms-keyvault-service-version: [1.0.0.215] x-powered-by: [ASP.NET] status: {code: 200, message: OK} - request: body: 'b''{"location": "southcentralus", "tags": {}, "properties": {"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "sku": {"family": "A", "name": "standard"}, "accessPolicies": [{"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": - "cdf4ba39-6a56-45be-a72a-13ec9cdfee91", "permissions": {"keys": ["get", "create", + "4b1f6d49-d203-442f-bb23-06d98ab68f05", "permissions": {"keys": ["get", "create", "delete", "list", "update", "import", "backup", "restore", "recover"], "secrets": ["get", "list", "set", "delete", "backup", "restore", "recover"], "certificates": ["get", "list", "delete", "create", "import", "update", "managecontacts", "getissuers", "listissuers", "setissuers", "deleteissuers", "manageissuers", "recover"], "storage": ["get", "list", "delete", "set", "update", "regeneratekey", "setsas", "listsas", "getsas", "deletesas"]}}, {"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", - "objectId": "739fc607-0f9e-40c8-a69b-84bb547e3751", "permissions": {"keys": + "objectId": "f9dda2cf-e03f-4a7a-a8ea-7411041143de", "permissions": {"keys": ["get", "wrapKey", "unwrapKey", "recover"]}}], "vaultUri": "https://clitest000003.vault.azure.net/", "enabledForDeployment": false}}''' headers: @@ -482,28 +444,28 @@ interactions: Connection: [keep-alive] Content-Length: ['1037'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003?api-version=2016-10-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"739fc607-0f9e-40c8-a69b-84bb547e3751","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"f9dda2cf-e03f-4a7a-a8ea-7411041143de","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} headers: cache-control: [no-cache] content-length: ['1280'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:46:03 GMT'] + date: ['Tue, 01 May 2018 21:47:35 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.210] + x-ms-keyvault-service-version: [1.0.0.215] x-ms-ratelimit-remaining-subscription-writes: ['1198'] x-powered-by: [ASP.NET] status: {code: 200, message: OK} @@ -515,41 +477,41 @@ interactions: CommandName: [keyvault update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003?api-version=2016-10-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"739fc607-0f9e-40c8-a69b-84bb547e3751","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"f9dda2cf-e03f-4a7a-a8ea-7411041143de","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} headers: cache-control: [no-cache] content-length: ['1280'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:46:03 GMT'] + date: ['Tue, 01 May 2018 21:47:36 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.210] + x-ms-keyvault-service-version: [1.0.0.215] x-powered-by: [ASP.NET] status: {code: 200, message: OK} - request: body: 'b''{"location": "southcentralus", "properties": {"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "sku": {"family": "A", "name": "standard"}, "accessPolicies": [{"tenantId": - "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": "cdf4ba39-6a56-45be-a72a-13ec9cdfee91", + "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": "4b1f6d49-d203-442f-bb23-06d98ab68f05", "permissions": {"keys": ["get", "create", "delete", "list", "update", "import", "backup", "restore", "recover"], "secrets": ["get", "list", "set", "delete", "backup", "restore", "recover"], "certificates": ["get", "list", "delete", "create", "import", "update", "managecontacts", "getissuers", "listissuers", "setissuers", "deleteissuers", "manageissuers", "recover"], "storage": ["get", "list", "delete", "set", "update", "regeneratekey", "setsas", "listsas", "getsas", "deletesas"]}}, - {"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": "739fc607-0f9e-40c8-a69b-84bb547e3751", + {"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": "f9dda2cf-e03f-4a7a-a8ea-7411041143de", "permissions": {"keys": ["get", "wrapKey", "unwrapKey", "recover"]}}], "vaultUri": "https://clitest000003.vault.azure.net/", "enabledForDeployment": false, "enableSoftDelete": true}}''' @@ -560,29 +522,29 @@ interactions: Connection: [keep-alive] Content-Length: ['1051'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 keyvaultmanagementclient/0.40.0 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003?api-version=2016-10-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"739fc607-0f9e-40c8-a69b-84bb547e3751","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"enableSoftDelete":true,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"f9dda2cf-e03f-4a7a-a8ea-7411041143de","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"enableSoftDelete":true,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} headers: cache-control: [no-cache] content-length: ['1304'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:46:04 GMT'] + date: ['Tue, 01 May 2018 21:47:36 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.210] - x-ms-ratelimit-remaining-subscription-writes: ['1197'] + x-ms-keyvault-service-version: [1.0.0.215] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] x-powered-by: [ASP.NET] status: {code: 200, message: OK} - request: @@ -593,9 +555,9 @@ interactions: CommandName: [resource update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault?api-version=2017-05-10 @@ -605,38 +567,50 @@ interactions: Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"],"capabilities":"CrossResourceGroupResourceMove, + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"],"apiProfiles":[{"profileVersion":"2018-03-01-hybrid","apiVersion":"2016-10-01"}],"capabilities":"CrossResourceGroupResourceMove, CrossSubscriptionResourceMove"},{"resourceType":"vaults/secrets","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"]},{"resourceType":"vaults/accessPolicies","locations":["North + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"],"apiProfiles":[{"profileVersion":"2018-03-01-hybrid","apiVersion":"2016-10-01"}]},{"resourceType":"vaults/accessPolicies","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"]},{"resourceType":"operations","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01","2014-12-19-preview"]},{"resourceType":"checkNameAvailability","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"]},{"resourceType":"deletedVaults","locations":["North + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"],"apiProfiles":[{"profileVersion":"2018-03-01-hybrid","apiVersion":"2016-10-01"}]},{"resourceType":"operations","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01","2014-12-19-preview"],"apiProfiles":[{"profileVersion":"2018-03-01-hybrid","apiVersion":"2016-10-01"}]},{"resourceType":"checkNameAvailability","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"]},{"resourceType":"deletedVaults","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/deletedVaults","locations":["North + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/deletedVaults","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/operationResults","locations":["North + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/deleteVirtualNetworkOrSubnets","locations":["East + US","North Central US","West Europe","North Europe","East Asia","Southeast + Asia","East US 2","Central US","South Central US","West Central US","West + US 2","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil + South","Central India","South India","West India","Canada Central","Canada + East","UK South","UK West","Korea Central","Korea South","France Central","Central + US EUAP","East US 2 EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/operationResults","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01"]}],"registrationState":"Registered"}'} + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01"]}],"registrationState":"Registered"}'} headers: cache-control: [no-cache] - content-length: ['3732'] + content-length: ['4817'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:46:04 GMT'] + date: ['Tue, 01 May 2018 21:47:37 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] @@ -651,28 +625,28 @@ interactions: CommandName: [resource update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003?api-version=2016-10-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"739fc607-0f9e-40c8-a69b-84bb547e3751","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"enableSoftDelete":true,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"f9dda2cf-e03f-4a7a-a8ea-7411041143de","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"enableSoftDelete":true,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} headers: cache-control: [no-cache] content-length: ['1304'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:46:05 GMT'] + date: ['Tue, 01 May 2018 21:47:38 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.210] + x-ms-keyvault-service-version: [1.0.0.215] x-powered-by: [ASP.NET] status: {code: 200, message: OK} - request: @@ -683,9 +657,9 @@ interactions: CommandName: [resource update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault?api-version=2017-05-10 @@ -695,38 +669,50 @@ interactions: Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"],"capabilities":"CrossResourceGroupResourceMove, + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"],"apiProfiles":[{"profileVersion":"2018-03-01-hybrid","apiVersion":"2016-10-01"}],"capabilities":"CrossResourceGroupResourceMove, CrossSubscriptionResourceMove"},{"resourceType":"vaults/secrets","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"]},{"resourceType":"vaults/accessPolicies","locations":["North + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"],"apiProfiles":[{"profileVersion":"2018-03-01-hybrid","apiVersion":"2016-10-01"}]},{"resourceType":"vaults/accessPolicies","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"]},{"resourceType":"operations","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01","2014-12-19-preview"]},{"resourceType":"checkNameAvailability","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"]},{"resourceType":"deletedVaults","locations":["North + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"],"apiProfiles":[{"profileVersion":"2018-03-01-hybrid","apiVersion":"2016-10-01"}]},{"resourceType":"operations","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01","2014-12-19-preview"],"apiProfiles":[{"profileVersion":"2018-03-01-hybrid","apiVersion":"2016-10-01"}]},{"resourceType":"checkNameAvailability","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01","2015-06-01"]},{"resourceType":"deletedVaults","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/deletedVaults","locations":["North + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations","locations":[],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/deletedVaults","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/operationResults","locations":["North + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/deleteVirtualNetworkOrSubnets","locations":["East + US","North Central US","West Europe","North Europe","East Asia","Southeast + Asia","East US 2","Central US","South Central US","West Central US","West + US 2","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil + South","Central India","South India","West India","Canada Central","Canada + East","UK South","UK West","Korea Central","Korea South","France Central","Central + US EUAP","East US 2 EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01"]},{"resourceType":"locations/operationResults","locations":["North Central US","East US","North Europe","West Europe","East Asia","Southeast Asia","East US 2","Central US","South Central US","West US","Japan East","Japan West","Australia East","Australia Southeast","Brazil South","Central India","South India","West India","Canada Central","Canada East","UK South","UK West","West - Central US","West US 2","Korea Central","Korea South","France Central"],"apiVersions":["2018-02-14-preview","2016-10-01"]}],"registrationState":"Registered"}'} + Central US","West US 2","Korea Central","Korea South","France Central","East + US 2 EUAP","Central US EUAP"],"apiVersions":["2018-02-14-preview","2016-10-01"]}],"registrationState":"Registered"}'} headers: cache-control: [no-cache] - content-length: ['3732'] + content-length: ['4817'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:46:05 GMT'] + date: ['Tue, 01 May 2018 21:47:38 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] @@ -737,14 +723,14 @@ interactions: body: 'b''{"location": "southcentralus", "tags": {}, "properties": {"sku": {"family": "A", "name": "standard"}, "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "accessPolicies": [{"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": - "cdf4ba39-6a56-45be-a72a-13ec9cdfee91", "permissions": {"keys": ["get", "create", + "4b1f6d49-d203-442f-bb23-06d98ab68f05", "permissions": {"keys": ["get", "create", "delete", "list", "update", "import", "backup", "restore", "recover"], "secrets": ["get", "list", "set", "delete", "backup", "restore", "recover"], "certificates": ["get", "list", "delete", "create", "import", "update", "managecontacts", "getissuers", "listissuers", "setissuers", "deleteissuers", "manageissuers", "recover"], "storage": ["get", "list", "delete", "set", "update", "regeneratekey", "setsas", "listsas", "getsas", "deletesas"]}}, {"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", - "objectId": "739fc607-0f9e-40c8-a69b-84bb547e3751", "permissions": {"keys": + "objectId": "f9dda2cf-e03f-4a7a-a8ea-7411041143de", "permissions": {"keys": ["get", "wrapKey", "unwrapKey", "recover"]}}], "enabledForDeployment": false, "enableSoftDelete": true, "vaultUri": "https://clitest000003.vault.azure.net/", "provisioningState": "RegisteringDns", "enablePurgeProtection": true}}''' @@ -755,28 +741,28 @@ interactions: Connection: [keep-alive] Content-Length: ['1133'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003?api-version=2016-10-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"739fc607-0f9e-40c8-a69b-84bb547e3751","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"enableSoftDelete":true,"enablePurgeProtection":true,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"f9dda2cf-e03f-4a7a-a8ea-7411041143de","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"enableSoftDelete":true,"enablePurgeProtection":true,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"RegisteringDns"}}'} headers: cache-control: [no-cache] content-length: ['1333'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:46:05 GMT'] + date: ['Tue, 01 May 2018 21:47:38 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.210] + x-ms-keyvault-service-version: [1.0.0.215] x-ms-ratelimit-remaining-subscription-writes: ['1198'] x-powered-by: [ASP.NET] status: {code: 200, message: OK} @@ -788,28 +774,28 @@ interactions: CommandName: [resource update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003?api-version=2016-10-01 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"cdf4ba39-6a56-45be-a72a-13ec9cdfee91","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"739fc607-0f9e-40c8-a69b-84bb547e3751","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"enableSoftDelete":true,"enablePurgeProtection":true,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.KeyVault/vaults/clitest000003","name":"clitest000003","type":"Microsoft.KeyVault/vaults","location":"southcentralus","tags":{},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"4b1f6d49-d203-442f-bb23-06d98ab68f05","permissions":{"keys":["get","create","delete","list","update","import","backup","restore","recover"],"secrets":["get","list","set","delete","backup","restore","recover"],"certificates":["get","list","delete","create","import","update","managecontacts","getissuers","listissuers","setissuers","deleteissuers","manageissuers","recover"],"storage":["get","list","delete","set","update","regeneratekey","setsas","listsas","getsas","deletesas"]}},{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"f9dda2cf-e03f-4a7a-a8ea-7411041143de","permissions":{"keys":["get","wrapKey","unwrapKey","recover"]}}],"enabledForDeployment":false,"enableSoftDelete":true,"enablePurgeProtection":true,"vaultUri":"https://clitest000003.vault.azure.net/","provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] content-length: ['1328'] content-type: [application/json; charset=utf-8] - date: ['Wed, 14 Mar 2018 22:46:36 GMT'] + date: ['Tue, 01 May 2018 21:48:08 GMT'] expires: ['-1'] pragma: [no-cache] - server: [Microsoft-IIS/8.5] + server: [Microsoft-IIS/10.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] x-aspnet-version: [4.0.30319] x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.210] + x-ms-keyvault-service-version: [1.0.0.215] x-powered-by: [ASP.NET] status: {code: 200, message: OK} - request: @@ -820,19 +806,18 @@ interactions: CommandName: [storage account update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"identity":{"principalId":"739fc607-0f9e-40c8-a69b-84bb547e3751","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-14T22:45:16.8101562Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} + body: {string: '{"identity":{"principalId":"f9dda2cf-e03f-4a7a-a8ea-7411041143de","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:47:05.9065524Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1387'] content-type: [application/json] - date: ['Wed, 14 Mar 2018 22:46:37 GMT'] + date: ['Tue, 01 May 2018 21:48:10 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -846,7 +831,7 @@ interactions: body: 'b''{"sku": {"name": "Standard_LRS"}, "tags": {}, "properties": {"encryption": {"services": {"blob": {"enabled": true}, "file": {"enabled": true}}, "keySource": "Microsoft.Keyvault", "keyvaultproperties": {"keyname": "testkey", "keyversion": - "fff5a9c679664908a6675a10b9c8d952", "keyvaulturi": "https://clitest000003.vault.azure.net/"}}, + "f99dcad9b19d4839be3296fd333700a9", "keyvaulturi": "https://clitest000003.vault.azure.net/"}}, "supportsHttpsTrafficOnly": false, "networkAcls": {"bypass": "AzureServices", "virtualNetworkRules": [], "ipRules": [], "defaultAction": "Allow"}}}''' headers: @@ -856,19 +841,18 @@ interactions: Connection: [keep-alive] Content-Length: ['491'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"identity":{"principalId":"739fc607-0f9e-40c8-a69b-84bb547e3751","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"keyvaultproperties":{"keyvaulturi":"https://clitest000003.vault.azure.net/","keyname":"testkey","keyversion":"fff5a9c679664908a6675a10b9c8d952"},"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-14T22:45:16.8414059Z"}},"keySource":"Microsoft.Keyvault"},"provisioningState":"Succeeded","creationTime":"2018-03-14T22:45:16.8101562Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} + body: {string: '{"identity":{"principalId":"f9dda2cf-e03f-4a7a-a8ea-7411041143de","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"keyvaultproperties":{"keyvaulturi":"https://clitest000003.vault.azure.net/","keyname":"testkey","keyversion":"f99dcad9b19d4839be3296fd333700a9"},"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:05.9534027Z"}},"keySource":"Microsoft.Keyvault"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:47:05.9065524Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1545'] content-type: [application/json] - date: ['Wed, 14 Mar 2018 22:46:39 GMT'] + date: ['Tue, 01 May 2018 21:48:12 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -877,7 +861,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null @@ -888,9 +872,9 @@ interactions: Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.4 (Darwin-17.4.0-x86_64-i386-64bit) requests/2.18.4 - msrest/0.4.25 msrest_azure/0.4.20 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.30] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -899,12 +883,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Wed, 14 Mar 2018 22:46:41 GMT'] + date: ['Tue, 01 May 2018 21:48:15 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdNREc1S0daV0U3RFBTQVlRQUxOVk9JNDRJRlNHQko0TlRJSHwxQzdFMjZFQzNBOTk2OUZGLVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdZQlVZMlVaMldaM0JVQlk0QVJSUjU0WktOVEZPQ0RPN0dNSnw1MEFGMTlBQjYxRTEzM0JCLVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_list_locations.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_list_locations.yaml index 978a6e21df0..f5290c6f7e0 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_list_locations.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_list_locations.yaml @@ -8,7 +8,7 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 subscriptionclient/1.2.1 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 subscriptionclient/1.2.1 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/locations?api-version=2016-06-01 @@ -39,15 +39,20 @@ interactions: Central US","longitude":"-110.234","latitude":"40.890"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/westus2","name":"westus2","displayName":"West US 2","longitude":"-119.852","latitude":"47.233"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/koreacentral","name":"koreacentral","displayName":"Korea Central","longitude":"126.9780","latitude":"37.5665"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/koreasouth","name":"koreasouth","displayName":"Korea - South","longitude":"129.0756","latitude":"35.1796"}]}'} + South","longitude":"129.0756","latitude":"35.1796"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/francecentral","name":"francecentral","displayName":"France + Central","longitude":"2.3730","latitude":"46.3772"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/francesouth","name":"francesouth","displayName":"France + South","longitude":"2.1972","latitude":"43.8345"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/australiacentral","name":"australiacentral","displayName":"Australia + Central","longitude":"149.1244","latitude":"-35.3075"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/australiacentral2","name":"australiacentral2","displayName":"Australia + Central 2","longitude":"149.1244","latitude":"-35.3075"}]}'} headers: cache-control: [no-cache] - content-length: ['4523'] + content-length: ['5269'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:11:35 GMT'] + date: ['Tue, 01 May 2018 21:48:17 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] vary: [Accept-Encoding] + x-content-type-options: [nosniff] status: {code: 200, message: OK} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_list_storage_accounts.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_list_storage_accounts.yaml index ca043f528a9..bbf2a0ff1af 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_list_storage_accounts.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_list_storage_accounts.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:48:17Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:48:17Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:11:36 GMT'] + date: ['Tue, 01 May 2018 21:48:17 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1195'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:11:37 GMT'] + date: ['Tue, 01 May 2018 21:48:17 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/63946121-517a-424d-9635-896b4cc8a043?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/935cdf39-c0de-4897-b12d-11c1f43e1569?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1195'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/63946121-517a-424d-9635-896b4cc8a043?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/935cdf39-c0de-4897-b12d-11c1f43e1569?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:11:54 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/63946121-517a-424d-9635-896b4cc8a043?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/63946121-517a-424d-9635-896b4cc8a043?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:37.6366830Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:37.6366830Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:11:37.5741907Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:18.3231444Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:18.3231444Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:48:18.2450195Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:12:12 GMT'] + date: ['Tue, 01 May 2018 21:48:34 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"OETfFP6IVszHBA3uwVEp9EFPFT46xDAoHkJ0BG1byG41EWZ62f8d+uXdMPKY7HVlYOgrWXcX8fxs1yNAqsjl9Q==","permissions":"FULL"},{"keyName":"key2","value":"XIKn0TTCYZGWcJ4H0V4T5a4Bdul/jq+xqhSvsU5jRmmp/lfItVVyP4BzpxjBpxJETnTJnLJxlVMUky7nbBMH3A==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"JpyZFS2rU/ITmy9GBt9dJfleHXQKyPbsm1h1IUmgr1qxETrsAeJ3exRr+g1qBwW6srp2+G4DJqNQADG1jid3ag==","permissions":"FULL"},{"keyName":"key2","value":"5qnrHpm9V5AdQGEFqM2q9KdH9kJSL+yzIh6R+9yFpOhg2P5GjXhcAwKX8/OEfuahhNcnZSjtGQN/gSgujew/+g==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:12:12 GMT'] + date: ['Tue, 01 May 2018 21:48:36 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -152,7 +130,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003?api-version=2017-10-01 @@ -162,14 +140,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:12:13 GMT'] + date: ['Tue, 01 May 2018 21:48:37 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/0151d0da-3bbe-4a98-aa00-55847842c6b2?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b9cf7077-db79-4990-b409-a7475f2dac0b?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} - request: body: null @@ -180,17 +159,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/0151d0da-3bbe-4a98-aa00-55847842c6b2?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b9cf7077-db79-4990-b409-a7475f2dac0b?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003","name":"clitest000003","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:14.1064068Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:14.1064068Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:12:14.0439010Z","primaryEndpoints":{"blob":"https://clitest000003.blob.core.windows.net/","queue":"https://clitest000003.queue.core.windows.net/","table":"https://clitest000003.table.core.windows.net/","file":"https://clitest000003.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003","name":"clitest000003","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:37.4795170Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:37.4795170Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:48:37.3857709Z","primaryEndpoints":{"blob":"https://clitest000003.blob.core.windows.net/","queue":"https://clitest000003.queue.core.windows.net/","table":"https://clitest000003.table.core.windows.net/","file":"https://clitest000003.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:12:31 GMT'] + date: ['Tue, 01 May 2018 21:48:54 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -198,6 +177,7 @@ interactions: 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: null @@ -209,17 +189,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"aiDL1Rg64ABytwt4Wro1D999z7ClIufr3/1hOWc+GfdowBUOCLFc7r19FrhKOswoY8GkYgIIkdgxnh5h9rFakw==","permissions":"FULL"},{"keyName":"key2","value":"4ELIf1EMXKVEf60ti+nvpc84tKdfO8JMOi1IVKd1SrSBbxJ4n0SiAu7DnMYe91LBuCpD0BcwkBiQdF8KrE89oQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"hKhdGhEQVL9EUpbHR/nmynJ5GOpRtciN9bY7LZUtSQkxoyryK6NudyK3KJl9lz8u1CHb1cWFEQFyRDb0LZlhfg==","permissions":"FULL"},{"keyName":"key2","value":"nU4o9UKVho35Jfw1fuOoKK+z1e41ejTzYtlOXDZ8sWTZHvHEFJyI1sUzF/SuZGWIeti3qFzNq6ZaigP8frZ9TA==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:12:32 GMT'] + date: ['Tue, 01 May 2018 21:48:55 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -227,7 +207,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1189'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: null @@ -238,23 +219,26 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2017-10-01 response: - body: {string: '{"value":[{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest6075/providers/Microsoft.Storage/storageAccounts/stgbnc8939","name":"stgbnc8939","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:07:05.6471355Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:07:05.6471355Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:07:05.6158803Z","primaryEndpoints":{"blob":"https://stgbnc8939.blob.core.windows.net/","queue":"https://stgbnc8939.queue.core.windows.net/","table":"https://stgbnc8939.table.core.windows.net/","file":"https://stgbnc8939.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest1501/providers/Microsoft.Storage/storageAccounts/stgjavavme823820652e","name":"stgjavavme823820652e","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:41:10.5736026Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:41:10.5736026Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:41:10.5579773Z","primaryEndpoints":{"blob":"https://stgjavavme823820652e.blob.core.windows.net/","queue":"https://stgjavavme823820652e.queue.core.windows.net/","table":"https://stgjavavme823820652e.table.core.windows.net/","file":"https://stgjavavme823820652e.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest9977/providers/Microsoft.Storage/storageAccounts/stgjavavm333507506ea","name":"stgjavavm333507506ea","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:32:47.9591527Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:32:47.9591527Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:32:47.8341521Z","primaryEndpoints":{"blob":"https://stgjavavm333507506ea.blob.core.windows.net/","queue":"https://stgjavavm333507506ea.queue.core.windows.net/","table":"https://stgjavavm333507506ea.table.core.windows.net/","file":"https://stgjavavm333507506ea.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3602/providers/Microsoft.Storage/storageAccounts/stg8927","name":"stg8927","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:37:55.0112849Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:37:55.0112849Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:37:54.9800708Z","primaryEndpoints":{"blob":"https://stg8927.blob.core.windows.net/","queue":"https://stg8927.queue.core.windows.net/","table":"https://stg8927.table.core.windows.net/","file":"https://stg8927.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest6075/providers/Microsoft.Storage/storageAccounts/stgjavavm52d424261a2","name":"stgjavavm52d424261a2","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:07:42.0875788Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:07:42.0875788Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:07:42.0563640Z","primaryEndpoints":{"blob":"https://stgjavavm52d424261a2.blob.core.windows.net/","queue":"https://stgjavavm52d424261a2.queue.core.windows.net/","table":"https://stgjavavm52d424261a2.table.core.windows.net/","file":"https://stgjavavm52d424261a2.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilx-group/providers/Microsoft.Storage/storageAccounts/awilxdevlab9274","name":"awilxdevlab9274","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{"hidden-DevTestLabs-LabUId":"3f487f2b-f13a-422f-a05c-761b17b0200d"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9463952Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9463952Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-07T22:43:14.9920432Z","primaryEndpoints":{"blob":"https://awilxdevlab9274.blob.core.windows.net/","queue":"https://awilxdevlab9274.queue.core.windows.net/","table":"https://awilxdevlab9274.table.core.windows.net/","file":"https://awilxdevlab9274.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest2038/providers/Microsoft.Storage/storageAccounts/stgjavavmac8610156cf","name":"stgjavavmac8610156cf","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:00:07.6351597Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:00:07.6351597Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:00:07.6039345Z","primaryEndpoints":{"blob":"https://stgjavavmac8610156cf.blob.core.windows.net/","queue":"https://stgjavavmac8610156cf.queue.core.windows.net/","table":"https://stgjavavmac8610156cf.table.core.windows.net/","file":"https://stgjavavmac8610156cf.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest5772/providers/Microsoft.Storage/storageAccounts/stgjavavm42113837dbb","name":"stgjavavm42113837dbb","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T12:48:36.1026547Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T12:48:36.1026547Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T12:48:36.0714523Z","primaryEndpoints":{"blob":"https://stgjavavm42113837dbb.blob.core.windows.net/","queue":"https://stgjavavm42113837dbb.queue.core.windows.net/","table":"https://stgjavavm42113837dbb.table.core.windows.net/","file":"https://stgjavavm42113837dbb.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg8678/providers/Microsoft.Storage/storageAccounts/stg7343","name":"stg7343","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.0401485Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.0401485Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-10-22T20:47:23.8366703Z","primaryEndpoints":{"blob":"https://stg7343.blob.core.windows.net/","queue":"https://stg7343.queue.core.windows.net/","table":"https://stg7343.table.core.windows.net/","file":"https://stg7343.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg7434/providers/Microsoft.Storage/storageAccounts/stg8548","name":"stg8548","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:39:56.6875433Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:39:56.6875433Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:39:56.6562752Z","primaryEndpoints":{"blob":"https://stg8548.blob.core.windows.net/","queue":"https://stg8548.queue.core.windows.net/","table":"https://stg8548.table.core.windows.net/","file":"https://stg8548.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest7312/providers/Microsoft.Storage/storageAccounts/stgjavavm43d95373650","name":"stgjavavm43d95373650","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:26:15.2306952Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:26:15.2306952Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:26:15.2150846Z","primaryEndpoints":{"blob":"https://stgjavavm43d95373650.blob.core.windows.net/","queue":"https://stgjavavm43d95373650.queue.core.windows.net/","table":"https://stgjavavm43d95373650.table.core.windows.net/","file":"https://stgjavavm43d95373650.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3093/providers/Microsoft.Storage/storageAccounts/stg4985","name":"stg4985","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:28:11.7207048Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:28:11.7207048Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:28:11.6894612Z","primaryEndpoints":{"blob":"https://stg4985.blob.core.windows.net/","queue":"https://stg4985.queue.core.windows.net/","table":"https://stg4985.table.core.windows.net/","file":"https://stg4985.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest9977/providers/Microsoft.Storage/storageAccounts/stgbnc9165","name":"stgbnc9165","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:31:59.0738016Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:31:59.0738016Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:31:59.0581787Z","primaryEndpoints":{"blob":"https://stgbnc9165.blob.core.windows.net/","queue":"https://stgbnc9165.queue.core.windows.net/","table":"https://stgbnc9165.table.core.windows.net/","file":"https://stgbnc9165.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest5772/providers/Microsoft.Storage/storageAccounts/stgjavavmcb00830196f","name":"stgjavavmcb00830196f","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T12:54:38.4891429Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T12:54:38.4891429Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T12:54:38.4422705Z","primaryEndpoints":{"blob":"https://stgjavavmcb00830196f.blob.core.windows.net/","queue":"https://stgjavavmcb00830196f.queue.core.windows.net/","table":"https://stgjavavmcb00830196f.table.core.windows.net/","file":"https://stgjavavmcb00830196f.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg1377/providers/Microsoft.Storage/storageAccounts/stg35556","name":"stg35556","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:29:10.3577399Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:29:10.3577399Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:29:10.3421120Z","primaryEndpoints":{"blob":"https://stg35556.blob.core.windows.net/","queue":"https://stg35556.queue.core.windows.net/","table":"https://stg35556.table.core.windows.net/","file":"https://stg35556.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg9de67119f7/providers/Microsoft.Storage/storageAccounts/st3ea29977a4","name":"st3ea29977a4","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9620243Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9620243Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-01T04:00:22.2331421Z","primaryEndpoints":{"blob":"https://st3ea29977a4.blob.core.windows.net/","queue":"https://st3ea29977a4.queue.core.windows.net/","table":"https://st3ea29977a4.table.core.windows.net/","file":"https://st3ea29977a4.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg8678/providers/Microsoft.Storage/storageAccounts/stg24699","name":"stg24699","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9932855Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9932855Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-10-22T20:47:23.3426259Z","primaryEndpoints":{"blob":"https://stg24699.blob.core.windows.net/","queue":"https://stg24699.queue.core.windows.net/","table":"https://stg24699.table.core.windows.net/","file":"https://stg24699.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3819/providers/Microsoft.Storage/storageAccounts/stg2666","name":"stg2666","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T23:15:53.4245534Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T23:15:53.4245534Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T23:15:53.3932595Z","primaryEndpoints":{"blob":"https://stg2666.blob.core.windows.net/","queue":"https://stg2666.queue.core.windows.net/","table":"https://stg2666.table.core.windows.net/","file":"https://stg2666.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest2038/providers/Microsoft.Storage/storageAccounts/stgbnc6669","name":"stgbnc6669","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T12:59:33.1175728Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T12:59:33.1175728Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T12:59:33.0863032Z","primaryEndpoints":{"blob":"https://stgbnc6669.blob.core.windows.net/","queue":"https://stgbnc6669.queue.core.windows.net/","table":"https://stgbnc6669.table.core.windows.net/","file":"https://stgbnc6669.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg1377/providers/Microsoft.Storage/storageAccounts/stg1798","name":"stg1798","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:29:09.9827302Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:29:09.9827302Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:29:09.9671375Z","primaryEndpoints":{"blob":"https://stg1798.blob.core.windows.net/","queue":"https://stg1798.queue.core.windows.net/","table":"https://stg1798.table.core.windows.net/","file":"https://stg1798.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest1501/providers/Microsoft.Storage/storageAccounts/stgbnc4090","name":"stgbnc4090","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:40:34.7555760Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:40:34.7555760Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:40:34.7086970Z","primaryEndpoints":{"blob":"https://stgbnc4090.blob.core.windows.net/","queue":"https://stgbnc4090.queue.core.windows.net/","table":"https://stgbnc4090.table.core.windows.net/","file":"https://stgbnc4090.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest7312/providers/Microsoft.Storage/storageAccounts/stgjavavm57b02213d98","name":"stgjavavm57b02213d98","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:18:03.2964360Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:18:03.2964360Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:18:03.1714019Z","primaryEndpoints":{"blob":"https://stgjavavm57b02213d98.blob.core.windows.net/","queue":"https://stgjavavm57b02213d98.queue.core.windows.net/","table":"https://stgjavavm57b02213d98.table.core.windows.net/","file":"https://stgjavavm57b02213d98.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg9511/providers/Microsoft.Storage/storageAccounts/stg4096","name":"stg4096","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:51:31.4329960Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:51:31.4329960Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:51:31.4174074Z","primaryEndpoints":{"blob":"https://stg4096.blob.core.windows.net/","queue":"https://stg4096.queue.core.windows.net/","table":"https://stg4096.table.core.windows.net/","file":"https://stg4096.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3602/providers/Microsoft.Storage/storageAccounts/stg4719","name":"stg4719","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:38:44.2043180Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:38:44.2043180Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:38:44.1730915Z","primaryEndpoints":{"blob":"https://stg4719.blob.core.windows.net/","queue":"https://stg4719.queue.core.windows.net/","table":"https://stg4719.table.core.windows.net/","file":"https://stg4719.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg771/providers/Microsoft.Storage/storageAccounts/stg1266","name":"stg1266","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:51:55.4657267Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:51:55.4657267Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:51:55.4344476Z","primaryEndpoints":{"blob":"https://stg1266.blob.core.windows.net/","queue":"https://stg1266.queue.core.windows.net/","table":"https://stg1266.table.core.windows.net/","file":"https://stg1266.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest8491/providers/Microsoft.Storage/storageAccounts/stgjavavm0539488888b","name":"stgjavavm0539488888b","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:36:35.0405070Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:36:35.0405070Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:36:35.0092280Z","primaryEndpoints":{"blob":"https://stgjavavm0539488888b.blob.core.windows.net/","queue":"https://stgjavavm0539488888b.queue.core.windows.net/","table":"https://stgjavavm0539488888b.table.core.windows.net/","file":"https://stgjavavm0539488888b.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest6621/providers/Microsoft.Storage/storageAccounts/stgjavavmd2b85295b29","name":"stgjavavmd2b85295b29","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:44:27.7895164Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:44:27.7895164Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:44:27.7738787Z","primaryEndpoints":{"blob":"https://stgjavavmd2b85295b29.blob.core.windows.net/","queue":"https://stgjavavmd2b85295b29.queue.core.windows.net/","table":"https://stgjavavmd2b85295b29.table.core.windows.net/","file":"https://stgjavavmd2b85295b29.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3502/providers/Microsoft.Storage/storageAccounts/stg2889","name":"stg2889","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T08:17:44.3543509Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T08:17:44.3543509Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T08:17:44.3230988Z","primaryEndpoints":{"blob":"https://stg2889.blob.core.windows.net/","queue":"https://stg2889.queue.core.windows.net/","table":"https://stg2889.table.core.windows.net/","file":"https://stg2889.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest8711/providers/Microsoft.Storage/storageAccounts/stgbnc2032","name":"stgbnc2032","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:14:27.1828795Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:14:27.1828795Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:14:27.1672525Z","primaryEndpoints":{"blob":"https://stgbnc2032.blob.core.windows.net/","queue":"https://stgbnc2032.queue.core.windows.net/","table":"https://stgbnc2032.table.core.windows.net/","file":"https://stgbnc2032.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg9511/providers/Microsoft.Storage/storageAccounts/stg3196","name":"stg3196","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:52:22.3698825Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:52:22.3698825Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:52:22.3386431Z","primaryEndpoints":{"blob":"https://stg3196.blob.core.windows.net/","queue":"https://stg3196.queue.core.windows.net/","table":"https://stg3196.table.core.windows.net/","file":"https://stg3196.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest4180/providers/Microsoft.Storage/storageAccounts/stgbnc5175","name":"stgbnc5175","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:50:47.5307698Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:50:47.5307698Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:50:47.4995195Z","primaryEndpoints":{"blob":"https://stgbnc5175.blob.core.windows.net/","queue":"https://stgbnc5175.queue.core.windows.net/","table":"https://stgbnc5175.table.core.windows.net/","file":"https://stgbnc5175.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest2727/providers/Microsoft.Storage/storageAccounts/stgbnc5888","name":"stgbnc5888","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:47:26.5456311Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:47:26.5456311Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:47:26.5143633Z","primaryEndpoints":{"blob":"https://stgbnc5888.blob.core.windows.net/","queue":"https://stgbnc5888.queue.core.windows.net/","table":"https://stgbnc5888.table.core.windows.net/","file":"https://stgbnc5888.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest5560/providers/Microsoft.Storage/storageAccounts/stgjavavm3ce9008563d","name":"stgjavavm3ce9008563d","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:10:52.6901809Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:10:52.6901809Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:10:52.6745969Z","primaryEndpoints":{"blob":"https://stgjavavm3ce9008563d.blob.core.windows.net/","queue":"https://stgjavavm3ce9008563d.queue.core.windows.net/","table":"https://stgjavavm3ce9008563d.table.core.windows.net/","file":"https://stgjavavm3ce9008563d.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgcomvad814855116a9864/providers/Microsoft.Storage/storageAccounts/stgvm32735dbab87839ad","name":"stgvm32735dbab87839ad","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.2745251Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.2745251Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-05T02:16:45.9826459Z","primaryEndpoints":{"blob":"https://stgvm32735dbab87839ad.blob.core.windows.net/","queue":"https://stgvm32735dbab87839ad.queue.core.windows.net/","table":"https://stgvm32735dbab87839ad.table.core.windows.net/","file":"https://stgvm32735dbab87839ad.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest8132/providers/Microsoft.Storage/storageAccounts/stgbnc1363","name":"stgbnc1363","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:17:50.0973565Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:17:50.0973565Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:17:50.0660905Z","primaryEndpoints":{"blob":"https://stgbnc1363.blob.core.windows.net/","queue":"https://stgbnc1363.queue.core.windows.net/","table":"https://stgbnc1363.table.core.windows.net/","file":"https://stgbnc1363.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3502/providers/Microsoft.Storage/storageAccounts/stg1316","name":"stg1316","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T08:17:43.8700047Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T08:17:43.8700047Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T08:17:43.8387584Z","primaryEndpoints":{"blob":"https://stg1316.blob.core.windows.net/","queue":"https://stg1316.queue.core.windows.net/","table":"https://stg1316.table.core.windows.net/","file":"https://stg1316.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3819/providers/Microsoft.Storage/storageAccounts/stg6080","name":"stg6080","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T23:15:53.3307714Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T23:15:53.3307714Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T23:15:53.2995412Z","primaryEndpoints":{"blob":"https://stg6080.blob.core.windows.net/","queue":"https://stg6080.queue.core.windows.net/","table":"https://stg6080.table.core.windows.net/","file":"https://stg6080.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg7434/providers/Microsoft.Storage/storageAccounts/stg379","name":"stg379","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:40:27.5308774Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:40:27.5308774Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:40:27.4683812Z","primaryEndpoints":{"blob":"https://stg379.blob.core.windows.net/","queue":"https://stg379.queue.core.windows.net/","table":"https://stg379.table.core.windows.net/","file":"https://stg379.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest3168/providers/Microsoft.Storage/storageAccounts/stgjavavm3dd27109215","name":"stgjavavm3dd27109215","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T13:03:43.1243832Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T13:03:43.1243832Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T13:03:43.0775007Z","primaryEndpoints":{"blob":"https://stgjavavm3dd27109215.blob.core.windows.net/","queue":"https://stgjavavm3dd27109215.queue.core.windows.net/","table":"https://stgjavavm3dd27109215.table.core.windows.net/","file":"https://stgjavavm3dd27109215.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg771/providers/Microsoft.Storage/storageAccounts/stg8019","name":"stg8019","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T22:52:44.3417181Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T22:52:44.3417181Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T22:52:44.3260939Z","primaryEndpoints":{"blob":"https://stg8019.blob.core.windows.net/","queue":"https://stg8019.queue.core.windows.net/","table":"https://stg8019.table.core.windows.net/","file":"https://stg8019.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rged92722916/providers/Microsoft.Storage/storageAccounts/st39055055d8","name":"st39055055d8","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9620243Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:35.9620243Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-14T08:29:14.1632499Z","primaryEndpoints":{"blob":"https://st39055055d8.blob.core.windows.net/","queue":"https://st39055055d8.queue.core.windows.net/","table":"https://st39055055d8.table.core.windows.net/","file":"https://st39055055d8.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg3093/providers/Microsoft.Storage/storageAccounts/stg31634","name":"stg31634","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T07:28:13.1805425Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T07:28:13.1805425Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T07:28:13.1493074Z","primaryEndpoints":{"blob":"https://stg31634.blob.core.windows.net/","queue":"https://stg31634.queue.core.windows.net/","table":"https://stg31634.table.core.windows.net/","file":"https://stg31634.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest5960/providers/Microsoft.Storage/storageAccounts/stgjavavmbf44552277c","name":"stgjavavmbf44552277c","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T12:56:14.6365579Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T12:56:14.6365579Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T12:56:14.6053295Z","primaryEndpoints":{"blob":"https://stgjavavmbf44552277c.blob.core.windows.net/","queue":"https://stgjavavmbf44552277c.queue.core.windows.net/","table":"https://stgjavavmbf44552277c.table.core.windows.net/","file":"https://stgjavavmbf44552277c.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vmbdtest6805/providers/Microsoft.Storage/storageAccounts/stgjavavm76e93900fb5","name":"stgjavavm76e93900fb5","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T15:28:13.0923956Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T15:28:13.0923956Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T15:28:13.0611455Z","primaryEndpoints":{"blob":"https://stgjavavm76e93900fb5.blob.core.windows.net/","queue":"https://stgjavavm76e93900fb5.queue.core.windows.net/","table":"https://stgjavavm76e93900fb5.table.core.windows.net/","file":"https://stgjavavm76e93900fb5.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg1819/providers/Microsoft.Storage/storageAccounts/stg6604","name":"stg6604","type":"Microsoft.Storage/storageAccounts","location":"eastus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-07T14:47:30.4664398Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-07T14:47:30.4664398Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-07T14:47:30.4195672Z","primaryEndpoints":{"blob":"https://stg6604.blob.core.windows.net/","queue":"https://stg6604.queue.core.windows.net/","table":"https://stg6604.table.core.windows.net/","file":"https://stg6604.file.core.windows.net/"},"primaryLocation":"eastus2","statusOfPrimary":"available","secondaryLocation":"centralus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationpyaffz2jgatrx3wmu5i3ms7e6vq6ffr6c7vpfafzb27ypbrksahwiedyawvx4g/providers/Microsoft.Storage/storageAccounts/acliautomationlab2482","name":"acliautomationlab2482","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"fad847a0-13b6-4061-9649-ad71226702f7"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-06T18:03:05.8117216Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-06T18:03:05.8117216Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-06T18:03:05.7648048Z","primaryEndpoints":{"blob":"https://acliautomationlab2482.blob.core.windows.net/","queue":"https://acliautomationlab2482.queue.core.windows.net/","table":"https://acliautomationlab2482.table.core.windows.net/","file":"https://acliautomationlab2482.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationtoxqsril3nh52zq7j2qv45ep7rtig4xnyg77hmcyl2uuausjromygxx7poq77x/providers/Microsoft.Storage/storageAccounts/acliautomationlab920","name":"acliautomationlab920","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"0958ba1e-279c-465c-a6a8-2b58d04b60b1"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-08T22:52:48.9788934Z","primaryEndpoints":{"blob":"https://acliautomationlab920.blob.core.windows.net/","queue":"https://acliautomationlab920.queue.core.windows.net/","table":"https://acliautomationlab920.table.core.windows.net/","file":"https://acliautomationlab920.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01/providers/Microsoft.Storage/storageAccounts/acliautomationlab2281","name":"acliautomationlab2281","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"72f1b266-2a21-4f0a-af01-934c93c72e6e"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-07T16:46:33.749166Z","primaryEndpoints":{"blob":"https://acliautomationlab2281.blob.core.windows.net/","queue":"https://acliautomationlab2281.queue.core.windows.net/","table":"https://acliautomationlab2281.table.core.windows.net/","file":"https://acliautomationlab2281.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01q2ksq7ibjhnl6y3qahzaq67qjcuv3p3xuhqhg6nufdyu6sttjlioho5vlbmp/providers/Microsoft.Storage/storageAccounts/acliautomationlab9808","name":"acliautomationlab9808","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"568e6db7-10b6-40e1-af55-4e5c0c9460b3"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-03T04:09:43.1153175Z","primaryEndpoints":{"blob":"https://acliautomationlab9808.blob.core.windows.net/","queue":"https://acliautomationlab9808.queue.core.windows.net/","table":"https://acliautomationlab9808.table.core.windows.net/","file":"https://acliautomationlab9808.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01p5mb65te4noiwqbh7ni3sggmdrhbawq2atk5mc6elgdat5qkg6fuguonzmvj/providers/Microsoft.Storage/storageAccounts/acliautomationlab9396","name":"acliautomationlab9396","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"ba56a262-8f28-4665-86d9-18a308784945"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-08T20:14:17.6792122Z","primaryEndpoints":{"blob":"https://acliautomationlab9396.blob.core.windows.net/","queue":"https://acliautomationlab9396.queue.core.windows.net/","table":"https://acliautomationlab9396.table.core.windows.net/","file":"https://acliautomationlab9396.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01ei2lu47wac7ixneeciagpf7ocqwvjvrq6rvkjl5hr2t3tyqkrzjdrsyd5lom/providers/Microsoft.Storage/storageAccounts/acliautomationlab4923","name":"acliautomationlab4923","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"db05f622-e24b-4bad-8265-0042a9feacff"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-26T20:28:36.5037123Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-26T20:28:36.5037123Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-26T20:28:36.3943699Z","primaryEndpoints":{"blob":"https://acliautomationlab4923.blob.core.windows.net/","queue":"https://acliautomationlab4923.queue.core.windows.net/","table":"https://acliautomationlab4923.table.core.windows.net/","file":"https://acliautomationlab4923.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation014o3znldng4uswc6mo6fhrx7gjnqitwa7b4ygnel5rhm624kjc53acrmyl3rk/providers/Microsoft.Storage/storageAccounts/acliautomationlab1633","name":"acliautomationlab1633","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"e33eb9e2-9aa6-4024-90b0-44509f6beded"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-06T18:03:01.1799270Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-06T18:03:01.1799270Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-06T18:03:01.1486631Z","primaryEndpoints":{"blob":"https://acliautomationlab1633.blob.core.windows.net/","queue":"https://acliautomationlab1633.queue.core.windows.net/","table":"https://acliautomationlab1633.table.core.windows.net/","file":"https://acliautomationlab1633.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationr7zmwrv545myosbhrhgmvyxvh473lloj24vcvwx5xuabi7hadxngt4sg7cbfxm/providers/Microsoft.Storage/storageAccounts/acliautomationlab4621","name":"acliautomationlab4621","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"3acb626c-e8a0-431d-bd15-47d2472c013f"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-07T18:36:05.7790991Z","primaryEndpoints":{"blob":"https://acliautomationlab4621.blob.core.windows.net/","queue":"https://acliautomationlab4621.queue.core.windows.net/","table":"https://acliautomationlab4621.table.core.windows.net/","file":"https://acliautomationlab4621.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation/providers/Microsoft.Storage/storageAccounts/acliautomationlab2987","name":"acliautomationlab2987","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"9f45d4bf-7e01-4684-9438-37c712728db1"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-07T16:48:01.7641299Z","primaryEndpoints":{"blob":"https://acliautomationlab2987.blob.core.windows.net/","queue":"https://acliautomationlab2987.queue.core.windows.net/","table":"https://acliautomationlab2987.table.core.windows.net/","file":"https://acliautomationlab2987.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01l6uben7lla33aijx72dhaf3wb7dlqb2u7ixr7vhmojrwbr6e5gv2rvdneg5r/providers/Microsoft.Storage/storageAccounts/acliautomationlab1471","name":"acliautomationlab1471","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"48fc5481-154a-40d8-a96c-90f85a3186b5"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-26T15:33:35.4529781Z","primaryEndpoints":{"blob":"https://acliautomationlab1471.blob.core.windows.net/","queue":"https://acliautomationlab1471.queue.core.windows.net/","table":"https://acliautomationlab1471.table.core.windows.net/","file":"https://acliautomationlab1471.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgl32osgy7cgkf2gfcwwpbcd5u76nxdn3k3r3kodgy6mqtntek4u6evygklnq5j4alp/providers/Microsoft.Storage/storageAccounts/clitest4bj7lpyqt63vmlicy","name":"clitest4bj7lpyqt63vmlicy","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:47.7602879Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:47.7602879Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:11:47.7134125Z","primaryEndpoints":{"blob":"https://clitest4bj7lpyqt63vmlicy.blob.core.windows.net/","queue":"https://clitest4bj7lpyqt63vmlicy.queue.core.windows.net/","table":"https://clitest4bj7lpyqt63vmlicy.table.core.windows.net/","file":"https://clitest4bj7lpyqt63vmlicy.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003","name":"clitest000003","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:14.1064068Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:14.1064068Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:12:14.0439010Z","primaryEndpoints":{"blob":"https://clitest000003.blob.core.windows.net/","queue":"https://clitest000003.queue.core.windows.net/","table":"https://clitest000003.table.core.windows.net/","file":"https://clitest000003.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgcv22bl3p5jculym7mxzp4qrzni5wnq3cmtnvsu52yhtwvwicm3fe3k6m24yqdilgh/providers/Microsoft.Storage/storageAccounts/clireg23zq5h4f67b5091810","name":"clireg23zq5h4f67b5091810","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"containerregistry":"clireg23zq5h4f67b5wu"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T09:18:14.1652856Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T09:18:14.1652856Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T09:18:14.1184391Z","primaryEndpoints":{"blob":"https://clireg23zq5h4f67b5091810.blob.core.windows.net/","queue":"https://clireg23zq5h4f67b5091810.queue.core.windows.net/","table":"https://clireg23zq5h4f67b5091810.table.core.windows.net/","file":"https://clireg23zq5h4f67b5091810.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation014m5le4sxlxnlbtvhekxljqndmwiuvvczqg2qumloh3nw3a6dg6qfqz65dczz/providers/Microsoft.Storage/storageAccounts/acliautomationlab2832","name":"acliautomationlab2832","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"ec24f56f-0a82-42f5-ae26-f391815aaf39"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-02T07:38:16.9674949Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-02T07:38:16.9674949Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-02T07:38:16.9356739Z","primaryEndpoints":{"blob":"https://acliautomationlab2832.blob.core.windows.net/","queue":"https://acliautomationlab2832.queue.core.windows.net/","table":"https://acliautomationlab2832.table.core.windows.net/","file":"https://acliautomationlab2832.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgdck3uxgfru5tm5ikoovn76skc4ldgtdq2qwxnli35y5tprl44fji7ebjsrqoftih5/providers/Microsoft.Storage/storageAccounts/clitestmhylproyn6v45bhrk","name":"clitestmhylproyn6v45bhrk","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:19.2774391Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:19.2774391Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:11:19.2305445Z","primaryEndpoints":{"blob":"https://clitestmhylproyn6v45bhrk.blob.core.windows.net/","queue":"https://clitestmhylproyn6v45bhrk.queue.core.windows.net/","table":"https://clitestmhylproyn6v45bhrk.table.core.windows.net/","file":"https://clitestmhylproyn6v45bhrk.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationbvd5rqbmr4xfzxbbls4vvm4zl66fz5ykv73nqx3rtougzgxhksyjpn3l43txu3/providers/Microsoft.Storage/storageAccounts/acliautomationlab386","name":"acliautomationlab386","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"40c3e5e9-6d70-41a5-9ba0-dedd33f96963"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-02T07:38:24.9254634Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-02T07:38:24.9254634Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-02T07:38:24.9098324Z","primaryEndpoints":{"blob":"https://acliautomationlab386.blob.core.windows.net/","queue":"https://acliautomationlab386.queue.core.windows.net/","table":"https://acliautomationlab386.table.core.windows.net/","file":"https://acliautomationlab386.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgcv22bl3p5jculym7mxzp4qrzni5wnq3cmtnvsu52yhtwvwicm3fe3k6m24yqdilgh/providers/Microsoft.Storage/storageAccounts/clitestaycxoezila4zvz3oc","name":"clitestaycxoezila4zvz3oc","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T09:17:31.1771220Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T09:17:31.1771220Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T09:17:31.1146217Z","primaryEndpoints":{"blob":"https://clitestaycxoezila4zvz3oc.blob.core.windows.net/","queue":"https://clitestaycxoezila4zvz3oc.queue.core.windows.net/","table":"https://clitestaycxoezila4zvz3oc.table.core.windows.net/","file":"https://clitestaycxoezila4zvz3oc.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationzlgmnmobxi6bkdkatnybuntm5ic5csahw33ox6rmthro3hjfgfqujqkdlrxfje/providers/Microsoft.Storage/storageAccounts/acliautomationlab3782","name":"acliautomationlab3782","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"b9dc7e5c-5ff3-4687-bf01-83833a4ccd53"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-04T06:41:36.4612382Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-04T06:41:36.4612382Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-04T06:41:36.4143632Z","primaryEndpoints":{"blob":"https://acliautomationlab3782.blob.core.windows.net/","queue":"https://acliautomationlab3782.queue.core.windows.net/","table":"https://acliautomationlab3782.table.core.windows.net/","file":"https://acliautomationlab3782.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01bn7wa4ubnulp6m4khobeloz6mvbxxg6ygalgryhylt2zpjgqcumow6ih26ud/providers/Microsoft.Storage/storageAccounts/acliautomationlab8383","name":"acliautomationlab8383","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"417cc8eb-3e86-4a90-9ce0-e215c7a4b9be"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-31T19:38:42.9687239Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-31T19:38:42.9687239Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-31T19:38:42.9375080Z","primaryEndpoints":{"blob":"https://acliautomationlab8383.blob.core.windows.net/","queue":"https://acliautomationlab8383.queue.core.windows.net/","table":"https://acliautomationlab8383.table.core.windows.net/","file":"https://acliautomationlab8383.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg2claqiiin2xfwkiskmfrvz2arekdocwsl7ff63gkroosvxv2whwbgdanw4tgesatc/providers/Microsoft.Storage/storageAccounts/clitest6uk5hhihzzby4ytcq","name":"clitest6uk5hhihzzby4ytcq","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T08:12:51.8379955Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T08:12:51.8379955Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T08:12:51.7754853Z","primaryEndpoints":{"blob":"https://clitest6uk5hhihzzby4ytcq.blob.core.windows.net/","queue":"https://clitest6uk5hhihzzby4ytcq.queue.core.windows.net/","table":"https://clitest6uk5hhihzzby4ytcq.table.core.windows.net/","file":"https://clitest6uk5hhihzzby4ytcq.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01ldu2m7bvtvotoelxgw2icl5sivnvoixudxyql6l42hseiv5stbbuulg7g3h4/providers/Microsoft.Storage/storageAccounts/acliautomationlab9248","name":"acliautomationlab9248","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"3ff20302-c399-4d32-88ed-2c84952da1c3"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7914959Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-04T00:40:16.2044479Z","primaryEndpoints":{"blob":"https://acliautomationlab9248.blob.core.windows.net/","queue":"https://acliautomationlab9248.queue.core.windows.net/","table":"https://acliautomationlab9248.table.core.windows.net/","file":"https://acliautomationlab9248.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation016zx7ulhvrc7ng6fcdst72y2t2fgbvbyueykqnw4d76aq4gyxd267voh5nixs/providers/Microsoft.Storage/storageAccounts/acliautomationlab8049","name":"acliautomationlab8049","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"909a5513-261d-4cd4-a8dd-19a18a866f77"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-08T02:56:53.0185142Z","primaryEndpoints":{"blob":"https://acliautomationlab8049.blob.core.windows.net/","queue":"https://acliautomationlab8049.queue.core.windows.net/","table":"https://acliautomationlab8049.table.core.windows.net/","file":"https://acliautomationlab8049.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation013mvyy356dnjmb5iwivgwu3gp2bgpjaik6sx3zxuqg36vhnchoc5vwvzzvxu4/providers/Microsoft.Storage/storageAccounts/acliautomationlab8828","name":"acliautomationlab8828","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"33f5487f-2303-4193-9ec1-9f4820d78d00"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-05T07:38:28.7575542Z","primaryEndpoints":{"blob":"https://acliautomationlab8828.blob.core.windows.net/","queue":"https://acliautomationlab8828.queue.core.windows.net/","table":"https://acliautomationlab8828.table.core.windows.net/","file":"https://acliautomationlab8828.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg5ekbhxjo6bqmf6jq6v3hdloqo6c2aowo6vhlg3huqevasa6vpuncpyhmjjvz2tlae/providers/Microsoft.Storage/storageAccounts/clitestysso67rm2b3ckvaap","name":"clitestysso67rm2b3ckvaap","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:31.0284038Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:31.0284038Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"ResolvingDns","creationTime":"2018-02-08T18:12:30.9815153Z","primaryEndpoints":{"blob":"https://clitestysso67rm2b3ckvaap.blob.core.windows.net/","queue":"https://clitestysso67rm2b3ckvaap.queue.core.windows.net/","table":"https://clitestysso67rm2b3ckvaap.table.core.windows.net/","file":"https://clitestysso67rm2b3ckvaap.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01iy5u4xyaed2wgxpr3oshkjvesx7eypiagoyydutuuwbrotz44zddkgr7qfay/providers/Microsoft.Storage/storageAccounts/acliautomationlab1940","name":"acliautomationlab1940","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"867204a5-7d7c-41c3-866f-845829532736"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-04T06:41:24.3204875Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-04T06:41:24.3204875Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-04T06:41:24.2579926Z","primaryEndpoints":{"blob":"https://acliautomationlab1940.blob.core.windows.net/","queue":"https://acliautomationlab1940.queue.core.windows.net/","table":"https://acliautomationlab1940.table.core.windows.net/","file":"https://acliautomationlab1940.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationrmo5dcfkn2tcdobw3qhwsafqbqgge3o7emagrlfoxgsioc2jr7e5cjztqewzla/providers/Microsoft.Storage/storageAccounts/acliautomationlab6710","name":"acliautomationlab6710","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"90a7effd-a5b2-48ce-ac70-88b48096881c"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-03T04:10:00.39885Z","primaryEndpoints":{"blob":"https://acliautomationlab6710.blob.core.windows.net/","queue":"https://acliautomationlab6710.queue.core.windows.net/","table":"https://acliautomationlab6710.table.core.windows.net/","file":"https://acliautomationlab6710.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationpytfzqow2fyxfbik7w4k34yguitwrmhunpwy4ozpgsy243novl4fjnlev2zfly/providers/Microsoft.Storage/storageAccounts/acliautomationlab1008","name":"acliautomationlab1008","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"7dfd84e6-8815-45cd-a927-4ea20034ff9e"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-31T19:38:56.9344030Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-31T19:38:56.9344030Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-31T19:38:56.8562798Z","primaryEndpoints":{"blob":"https://acliautomationlab1008.blob.core.windows.net/","queue":"https://acliautomationlab1008.queue.core.windows.net/","table":"https://acliautomationlab1008.table.core.windows.net/","file":"https://acliautomationlab1008.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgto2ghq4h25fuawweucv6ste57zdppblaq4wjjkogzmaqyvsk7j62layubppuog7ey/providers/Microsoft.Storage/storageAccounts/clitestsfuvmkmzvamdsi47q","name":"clitestsfuvmkmzvamdsi47q","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:38.9141035Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:38.9141035Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:09:38.8672665Z","primaryEndpoints":{"blob":"https://clitestsfuvmkmzvamdsi47q.blob.core.windows.net/","queue":"https://clitestsfuvmkmzvamdsi47q.queue.core.windows.net/","table":"https://clitestsfuvmkmzvamdsi47q.table.core.windows.net/","file":"https://clitestsfuvmkmzvamdsi47q.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:37.6366830Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:11:37.6366830Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:11:37.5741907Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationgbb6evd4zx72bc5wpfijxlcbpo5n24rkj2kg3y57jpl2mkxc6w5x5exnsantug/providers/Microsoft.Storage/storageAccounts/acliautomationlab5191","name":"acliautomationlab5191","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"bfb18d73-f216-4bdc-aba6-252bba91adb2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-26T20:28:36.4256121Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-26T20:28:36.4256121Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-26T20:28:36.3631077Z","primaryEndpoints":{"blob":"https://acliautomationlab5191.blob.core.windows.net/","queue":"https://acliautomationlab5191.queue.core.windows.net/","table":"https://acliautomationlab5191.table.core.windows.net/","file":"https://acliautomationlab5191.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationrcjorwrtg3oudx2a6akfwe5e6n7ocvpleklcwwqclzazlly76iaddtkjqtdwbe/providers/Microsoft.Storage/storageAccounts/acliautomationlab5146","name":"acliautomationlab5146","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"6734c4ab-6f8d-46e5-afec-0ed8275cccc7"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T16:45:00.1329602Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T16:45:00.1329602Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T16:45:00.0861198Z","primaryEndpoints":{"blob":"https://acliautomationlab5146.blob.core.windows.net/","queue":"https://acliautomationlab5146.queue.core.windows.net/","table":"https://acliautomationlab5146.table.core.windows.net/","file":"https://acliautomationlab5146.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01undmfcuvtas2vq76b7cdf2bcb522g55yjxgq26oqjumof4h3bkhfa5f5galo/providers/Microsoft.Storage/storageAccounts/acliautomationlab3187","name":"acliautomationlab3187","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"3cd350aa-2568-49ea-a4a2-41dd07e9e8ac"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-02T05:13:09.9630161Z","primaryEndpoints":{"blob":"https://acliautomationlab3187.blob.core.windows.net/","queue":"https://acliautomationlab3187.queue.core.windows.net/","table":"https://acliautomationlab3187.table.core.windows.net/","file":"https://acliautomationlab3187.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationsxtwbd7crie33fjnfjz2zp7ibcmfz4gyjh5mvqoqkz3y7txx7g34rl7mmoucew/providers/Microsoft.Storage/storageAccounts/acliautomationlab3276","name":"acliautomationlab3276","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"9f96ba9d-7858-43e0-a93a-9424a36a0975"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7602255Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-05T07:38:39.4934331Z","primaryEndpoints":{"blob":"https://acliautomationlab3276.blob.core.windows.net/","queue":"https://acliautomationlab3276.queue.core.windows.net/","table":"https://acliautomationlab3276.table.core.windows.net/","file":"https://acliautomationlab3276.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Premium_LRS","tier":"Premium"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sdk-test/providers/Microsoft.Storage/storageAccounts/sdkteststor","name":"sdkteststor","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.8539723Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-05-21T04:29:51.1804697Z","primaryEndpoints":{"blob":"https://sdkteststor.blob.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationyl5duneg4gkn25csd2rd4lbm2yjjq5n33z24jxikgchafi3xnfgokwxtsor56r/providers/Microsoft.Storage/storageAccounts/acliautomationlab1231","name":"acliautomationlab1231","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"f500a48c-e003-403a-b50a-903a96f6d226"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7133409Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7133409Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-08T02:59:00.3810995Z","primaryEndpoints":{"blob":"https://acliautomationlab1231.blob.core.windows.net/","queue":"https://acliautomationlab1231.queue.core.windows.net/","table":"https://acliautomationlab1231.table.core.windows.net/","file":"https://acliautomationlab1231.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg6246/providers/Microsoft.Storage/storageAccounts/javawebapp735267887","name":"javawebapp735267887","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T12:44:08.0866484Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T12:44:08.0866484Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T12:44:08.0397682Z","primaryEndpoints":{"blob":"https://javawebapp735267887.blob.core.windows.net/","queue":"https://javawebapp735267887.queue.core.windows.net/","table":"https://javawebapp735267887.table.core.windows.net/","file":"https://javawebapp735267887.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01ptu376gffvlvblokeyvsvqoefixzvz2uosy7gvqozzktnhvpufmcc5ut4ytd/providers/Microsoft.Storage/storageAccounts/acliautomationlab2257","name":"acliautomationlab2257","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"e6cd699b-4ac2-4022-a435-960bc7d3ee9f"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7289702Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-08T22:52:45.5675859Z","primaryEndpoints":{"blob":"https://acliautomationlab2257.blob.core.windows.net/","queue":"https://acliautomationlab2257.queue.core.windows.net/","table":"https://acliautomationlab2257.table.core.windows.net/","file":"https://acliautomationlab2257.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation01kr3ll4q2x5vuwozn4xz6zoybb4odfjebsjtwcxrehup7jnzykb47tmcsohyz/providers/Microsoft.Storage/storageAccounts/acliautomationlab6989","name":"acliautomationlab6989","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"3e585a6c-7c78-494c-99f8-a56e8734fb6d"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T16:44:45.7241602Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T16:44:45.7241602Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T16:44:45.6772890Z","primaryEndpoints":{"blob":"https://acliautomationlab6989.blob.core.windows.net/","queue":"https://acliautomationlab6989.queue.core.windows.net/","table":"https://acliautomationlab6989.table.core.windows.net/","file":"https://acliautomationlab6989.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomationt3zeu76ormrubewlqrnf4ykozdfs3pr2ahftj4d33tuybrpobavi5sbtcdcfc4/providers/Microsoft.Storage/storageAccounts/acliautomationlab9106","name":"acliautomationlab9106","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"498bf2d2-520c-42fd-b974-269015697a98"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7758767Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-04T00:40:33.0829429Z","primaryEndpoints":{"blob":"https://acliautomationlab9106.blob.core.windows.net/","queue":"https://acliautomationlab9106.queue.core.windows.net/","table":"https://acliautomationlab9106.table.core.windows.net/","file":"https://acliautomationlab9106.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/javacsmrg9129/providers/Microsoft.Storage/storageAccounts/javawebapp575092367","name":"javawebapp575092367","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T02:46:42.1621654Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T02:46:42.1621654Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T02:46:42.1153349Z","primaryEndpoints":{"blob":"https://javawebapp575092367.blob.core.windows.net/","queue":"https://javawebapp575092367.queue.core.windows.net/","table":"https://javawebapp575092367.table.core.windows.net/","file":"https://javawebapp575092367.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cliautomation2nscoydrikfz67cluekp6xqv4zkltay5x7ubl3qh2yb73qfdjq3j24fzcrd766/providers/Microsoft.Storage/storageAccounts/acliautomationlab2578","name":"acliautomationlab2578","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"8cf9f8f3-ff0c-43a5-809d-b4be39f17fa8"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T01:40:36.7446210Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-02T05:13:20.2601933Z","primaryEndpoints":{"blob":"https://acliautomationlab2578.blob.core.windows.net/","queue":"https://acliautomationlab2578.queue.core.windows.net/","table":"https://acliautomationlab2578.table.core.windows.net/","file":"https://acliautomationlab2578.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rga3f3zxudbuy3iipjzrrdghm5c5gqapaqnp3bxhrqtyvmpvin2ees27mrrzg2j5t6e/providers/Microsoft.Storage/storageAccounts/clitest4ibjeed42cdh5vxdc","name":"clitest4ibjeed42cdh5vxdc","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:02.8966124Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:02.8966124Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:12:02.8497510Z","primaryEndpoints":{"blob":"https://clitest4ibjeed42cdh5vxdc.blob.core.windows.net/","queue":"https://clitest4ibjeed42cdh5vxdc.queue.core.windows.net/","table":"https://clitest4ibjeed42cdh5vxdc.table.core.windows.net/","file":"https://clitest4ibjeed42cdh5vxdc.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxstorage","name":"wilxstorage","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-05T21:40:13.3804210Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-05T21:40:13.3804210Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-05T21:40:13.3335235Z","primaryEndpoints":{"blob":"https://wilxstorage.blob.core.windows.net/","queue":"https://wilxstorage.queue.core.windows.net/","table":"https://wilxstorage.table.core.windows.net/","file":"https://wilxstorage.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorage-secondary.blob.core.windows.net/","queue":"https://wilxstorage-secondary.queue.core.windows.net/","table":"https://wilxstorage-secondary.table.core.windows.net/"}}}]}'} + body: {string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/o0zeaawp7t7n4skagntpri4","name":"o0zeaawp7t7n4skagntpri4","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.2637195Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.2637195Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.2168154Z","primaryEndpoints":{"blob":"https://o0zeaawp7t7n4skagntpri4.blob.core.windows.net/","queue":"https://o0zeaawp7t7n4skagntpri4.queue.core.windows.net/","table":"https://o0zeaawp7t7n4skagntpri4.table.core.windows.net/","file":"https://o0zeaawp7t7n4skagntpri4.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/zeaawp7t7n4skagntpub","name":"zeaawp7t7n4skagntpub","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.5762847Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.5762847Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.5294154Z","primaryEndpoints":{"blob":"https://zeaawp7t7n4skagntpub.blob.core.windows.net/","queue":"https://zeaawp7t7n4skagntpub.queue.core.windows.net/","table":"https://zeaawp7t7n4skagntpub.table.core.windows.net/","file":"https://zeaawp7t7n4skagntpub.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/storGRP1/providers/Microsoft.Storage/storageAccounts/storacc2","name":"storacc2","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-09T18:24:41.3214880Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-09T18:24:41.3214880Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-09T18:24:41.2902466Z","primaryEndpoints":{"blob":"https://storacc2.blob.core.windows.net/","queue":"https://storacc2.queue.core.windows.net/","table":"https://storacc2.table.core.windows.net/","file":"https://storacc2.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/zeaawp7t7n4skdiag0","name":"zeaawp7t7n4skdiag0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.7951275Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.7951275Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.7482499Z","primaryEndpoints":{"blob":"https://zeaawp7t7n4skdiag0.blob.core.windows.net/","queue":"https://zeaawp7t7n4skdiag0.queue.core.windows.net/","table":"https://zeaawp7t7n4skdiag0.table.core.windows.net/","file":"https://zeaawp7t7n4skdiag0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyReallyCoolVM202/providers/Microsoft.Storage/storageAccounts/mynewaccount1234","name":"mynewaccount1234","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-27T21:34:15.2961058Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-27T21:34:15.2961058Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-27T21:34:15.2335978Z","primaryEndpoints":{"blob":"https://mynewaccount1234.blob.core.windows.net/","queue":"https://mynewaccount1234.queue.core.windows.net/","table":"https://mynewaccount1234.table.core.windows.net/","file":"https://mynewaccount1234.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/60zeaawp7t7n4skagntpri1","name":"60zeaawp7t7n4skagntpri1","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:59.4978129Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:59.4978129Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:33:59.3727743Z","primaryEndpoints":{"blob":"https://60zeaawp7t7n4skagntpri1.blob.core.windows.net/","queue":"https://60zeaawp7t7n4skagntpri1.queue.core.windows.net/","table":"https://60zeaawp7t7n4skagntpri1.table.core.windows.net/","file":"https://60zeaawp7t7n4skagntpri1.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/00zeaawp7t7n4skagntpri0","name":"00zeaawp7t7n4skagntpri0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:57.1533290Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:57.1533290Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:33:57.1064646Z","primaryEndpoints":{"blob":"https://00zeaawp7t7n4skagntpri0.blob.core.windows.net/","queue":"https://00zeaawp7t7n4skagntpri0.queue.core.windows.net/","table":"https://00zeaawp7t7n4skagntpri0.table.core.windows.net/","file":"https://00zeaawp7t7n4skagntpri0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Premium_LRS","tier":"Premium"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxgroupdisks925","name":"wilxgroupdisks925","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-13T17:14:42.2678046Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-13T17:14:42.2678046Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-13T17:14:42.2522063Z","primaryEndpoints":{"blob":"https://wilxgroupdisks925.blob.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/i0zeaawp7t7n4skagntpri3","name":"i0zeaawp7t7n4skagntpri3","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:59.2790240Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:33:59.2790240Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:33:59.2321471Z","primaryEndpoints":{"blob":"https://i0zeaawp7t7n4skagntpri3.blob.core.windows.net/","queue":"https://i0zeaawp7t7n4skagntpri3.queue.core.windows.net/","table":"https://i0zeaawp7t7n4skagntpri3.table.core.windows.net/","file":"https://i0zeaawp7t7n4skagntpri3.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/zeaawp7t7n4skexhb0","name":"zeaawp7t7n4skexhb0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.8576146Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.8576146Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.7951275Z","primaryEndpoints":{"blob":"https://zeaawp7t7n4skexhb0.blob.core.windows.net/","queue":"https://zeaawp7t7n4skexhb0.queue.core.windows.net/","table":"https://zeaawp7t7n4skexhb0.table.core.windows.net/","file":"https://zeaawp7t7n4skexhb0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/zeaawp7t7n4skmstr0","name":"zeaawp7t7n4skmstr0","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.5294154Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.5294154Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.4825090Z","primaryEndpoints":{"blob":"https://zeaawp7t7n4skmstr0.blob.core.windows.net/","queue":"https://zeaawp7t7n4skmstr0.queue.core.windows.net/","table":"https://zeaawp7t7n4skmstr0.table.core.windows.net/","file":"https://zeaawp7t7n4skmstr0.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitesti4aotnzdo4/providers/Microsoft.Storage/storageAccounts/c0zeaawp7t7n4skagntpri2","name":"c0zeaawp7t7n4skagntpri2","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.8889157Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-18T18:34:00.8889157Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-01-18T18:34:00.8263879Z","primaryEndpoints":{"blob":"https://c0zeaawp7t7n4skagntpri2.blob.core.windows.net/","queue":"https://c0zeaawp7t7n4skagntpri2.queue.core.windows.net/","table":"https://c0zeaawp7t7n4skagntpri2.table.core.windows.net/","file":"https://c0zeaawp7t7n4skagntpri2.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available"}},{"identity":{"principalId":"4b358eca-1f6e-4da5-a90c-5cfda2b6ca83","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/amar/providers/Microsoft.Storage/storageAccounts/eastustorage1","name":"eastustorage1","type":"Microsoft.Storage/storageAccounts","location":"eastus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-21T02:38:33.4035294Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-21T02:38:33.4035294Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-03-21T02:38:33.3253713Z","primaryEndpoints":{"blob":"https://eastustorage1.blob.core.windows.net/","queue":"https://eastustorage1.queue.core.windows.net/","table":"https://eastustorage1.table.core.windows.net/","file":"https://eastustorage1.file.core.windows.net/"},"primaryLocation":"eastus","statusOfPrimary":"available","secondaryLocation":"westus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroupeastus2/providers/Microsoft.Storage/storageAccounts/wilxstorageeastus2","name":"wilxstorageeastus2","type":"Microsoft.Storage/storageAccounts","location":"eastus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-30T18:32:07.3429304Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-30T18:32:07.3429304Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-30T18:32:07.2804546Z","primaryEndpoints":{"blob":"https://wilxstorageeastus2.blob.core.windows.net/","queue":"https://wilxstorageeastus2.queue.core.windows.net/","table":"https://wilxstorageeastus2.table.core.windows.net/","file":"https://wilxstorageeastus2.file.core.windows.net/"},"primaryLocation":"eastus2","statusOfPrimary":"available","secondaryLocation":"centralus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorageeastus2-secondary.blob.core.windows.net/","queue":"https://wilxstorageeastus2-secondary.queue.core.windows.net/","table":"https://wilxstorageeastus2-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgp3j2bt5nvsedgoxpqt6xtucbamnbo7jkgrcckdigt3aclxopqxio6lxjlqrj3czo7/providers/Microsoft.Storage/storageAccounts/clitestt7lrbv35ny3lgnfak","name":"clitestt7lrbv35ny3lgnfak","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1522571Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1522571Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:17:59.2725025Z","primaryEndpoints":{"blob":"https://clitestt7lrbv35ny3lgnfak.blob.core.windows.net/","queue":"https://clitestt7lrbv35ny3lgnfak.queue.core.windows.net/","table":"https://clitestt7lrbv35ny3lgnfak.table.core.windows.net/","file":"https://clitestt7lrbv35ny3lgnfak.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/vscode-spot/providers/Microsoft.Storage/storageAccounts/spot1936b9594f55526a14","name":"spot1936b9594f55526a14","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-30T04:32:25.2179795Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-30T04:32:25.2179795Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-30T04:32:25.0930004Z","primaryEndpoints":{"blob":"https://spot1936b9594f55526a14.blob.core.windows.net/","queue":"https://spot1936b9594f55526a14.queue.core.windows.net/","table":"https://spot1936b9594f55526a14.table.core.windows.net/","file":"https://spot1936b9594f55526a14.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/awilxlab6038","name":"awilxlab6038","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"hidden-DevTestLabs-LabUId":"8887c3df-fb11-4c4a-b5ea-fb85003cd93d"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-11T22:14:43.7809117Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-11T22:14:43.7809117Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-11T22:14:43.6871681Z","primaryEndpoints":{"blob":"https://awilxlab6038.blob.core.windows.net/","queue":"https://awilxlab6038.queue.core.windows.net/","table":"https://awilxlab6038.table.core.windows.net/","file":"https://awilxlab6038.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy985","name":"foozy985","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2460333Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2460333Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-11T22:39:05.4716715Z","primaryEndpoints":{"blob":"https://foozy985.blob.core.windows.net/","queue":"https://foozy985.queue.core.windows.net/","table":"https://foozy985.table.core.windows.net/","file":"https://foozy985.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/amar/providers/Microsoft.Storage/storageAccounts/testacc7561","name":"testacc7561","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-13T01:22:28.4626746Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-13T01:22:28.4626746Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-03-13T01:22:28.4157923Z","primaryEndpoints":{"blob":"https://testacc7561.blob.core.windows.net/","queue":"https://testacc7561.queue.core.windows.net/","table":"https://testacc7561.table.core.windows.net/","file":"https://testacc7561.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgcy7ox5qk3ftoqfvnj2gsphlw7o3kwgyxw7zuvep5lgezszs2ik2wsar4amtsck7mw/providers/Microsoft.Storage/storageAccounts/clitestjjf7hxdcmump2f5jj","name":"clitestjjf7hxdcmump2f5jj","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:25.4950895Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:25.4950895Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:48:25.4013159Z","primaryEndpoints":{"blob":"https://clitestjjf7hxdcmump2f5jj.blob.core.windows.net/","queue":"https://clitestjjf7hxdcmump2f5jj.queue.core.windows.net/","table":"https://clitestjjf7hxdcmump2f5jj.table.core.windows.net/","file":"https://clitestjjf7hxdcmump2f5jj.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxstorage2","name":"wilxstorage2","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-16T19:43:30.0571507Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-16T19:43:30.0571507Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-16T19:43:29.9946790Z","primaryEndpoints":{"blob":"https://wilxstorage2.blob.core.windows.net/","queue":"https://wilxstorage2.queue.core.windows.net/","table":"https://wilxstorage2.table.core.windows.net/","file":"https://wilxstorage2.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorage2-secondary.blob.core.windows.net/","queue":"https://wilxstorage2-secondary.queue.core.windows.net/","table":"https://wilxstorage2-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_ZRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/foostore103","name":"foostore103","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1991330Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1991330Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-05-25T23:52:18.1234838Z","primaryEndpoints":{"blob":"https://foostore103.blob.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_ZRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/foostore102","name":"foostore102","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1835342Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1835342Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-05-25T19:32:49.5192125Z","primaryEndpoints":{"blob":"https://foostore102.blob.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgcy7ox5qk3ftoqfvnj2gsphlw7o3kwgyxw7zuvep5lgezszs2ik2wsar4amtsck7mw/providers/Microsoft.Storage/storageAccounts/clitestwtqzdriopzuaexpa2","name":"clitestwtqzdriopzuaexpa2","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:06.2918736Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:06.2918736Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:48:06.2137287Z","primaryEndpoints":{"blob":"https://clitestwtqzdriopzuaexpa2.blob.core.windows.net/","queue":"https://clitestwtqzdriopzuaexpa2.queue.core.windows.net/","table":"https://clitestwtqzdriopzuaexpa2.table.core.windows.net/","file":"https://clitestwtqzdriopzuaexpa2.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitest345","name":"zitest345","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.8313291Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.8313291Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-07T21:55:13.9394493Z","primaryEndpoints":{"blob":"https://zitest345.blob.core.windows.net/","queue":"https://zitest345.queue.core.windows.net/","table":"https://zitest345.table.core.windows.net/","file":"https://zitest345.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitest","name":"zitest","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.7688032Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.7688032Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-05-03T20:07:05.353746Z","primaryEndpoints":{"blob":"https://zitest.blob.core.windows.net/","queue":"https://zitest.queue.core.windows.net/","table":"https://zitest.table.core.windows.net/","file":"https://zitest.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitest1012","name":"zitest1012","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.8001033Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:59.8001033Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2017-07-07T02:12:27.684591Z","primaryEndpoints":{"blob":"https://zitest1012.blob.core.windows.net/","queue":"https://zitest1012.queue.core.windows.net/","table":"https://zitest1012.table.core.windows.net/","file":"https://zitest1012.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgvnc44s5iiyknx6iehpbmjsf7y6xsqhrqvyb5opb2yr5wagkqftcqlbbpfkralo2id/providers/Microsoft.Storage/storageAccounts/clitesttc4beb6y7zcdc7zly","name":"clitesttc4beb6y7zcdc7zly","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1522571Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1522571Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:16:26.3626209Z","primaryEndpoints":{"blob":"https://clitesttc4beb6y7zcdc7zly.blob.core.windows.net/","queue":"https://clitesttc4beb6y7zcdc7zly.queue.core.windows.net/","table":"https://clitesttc4beb6y7zcdc7zly.table.core.windows.net/","file":"https://clitesttc4beb6y7zcdc7zly.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/lmazuel-docker-machine/providers/Microsoft.Storage/storageAccounts/vhdsn51j1sdv8scmv98fmq8q","name":"vhdsn51j1sdv8scmv98fmq8q","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.3085287Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.3085287Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-03T21:43:45.5227216Z","primaryEndpoints":{"blob":"https://vhdsn51j1sdv8scmv98fmq8q.blob.core.windows.net/","queue":"https://vhdsn51j1sdv8scmv98fmq8q.queue.core.windows.net/","table":"https://vhdsn51j1sdv8scmv98fmq8q.table.core.windows.net/","file":"https://vhdsn51j1sdv8scmv98fmq8q.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgpr2r634eggrjey2jx7izbldaygmfpo4oz23evpt6gldownza2h3gwzfam5h7nffwd/providers/Microsoft.Storage/storageAccounts/clitestbo4aozjkl4cp5ceex","name":"clitestbo4aozjkl4cp5ceex","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:21.6512920Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:21.6512920Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:48:21.5575410Z","primaryEndpoints":{"blob":"https://clitestbo4aozjkl4cp5ceex.blob.core.windows.net/","queue":"https://clitestbo4aozjkl4cp5ceex.queue.core.windows.net/","table":"https://clitestbo4aozjkl4cp5ceex.table.core.windows.net/","file":"https://clitestbo4aozjkl4cp5ceex.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy984","name":"foozy984","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2460333Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2460333Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-11T18:22:12.9346214Z","primaryEndpoints":{"blob":"https://foozy984.blob.core.windows.net/","queue":"https://foozy984.queue.core.windows.net/","table":"https://foozy984.table.core.windows.net/","file":"https://foozy984.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgzlponhuihq2f3r2ncatzpvyupukdm6ixm63jq2whzuvbuchjhov4vejrj4uspf7ju/providers/Microsoft.Storage/storageAccounts/clitestracm62rkgrryoiiig","name":"clitestracm62rkgrryoiiig","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T16:57:00.9900481Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T16:57:00.9900481Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T16:57:00.9119456Z","primaryEndpoints":{"blob":"https://clitestracm62rkgrryoiiig.blob.core.windows.net/","queue":"https://clitestracm62rkgrryoiiig.queue.core.windows.net/","table":"https://clitestracm62rkgrryoiiig.table.core.windows.net/","file":"https://clitestracm62rkgrryoiiig.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/testacc209","name":"testacc209","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.3156846Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.3156846Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-01-26T19:04:16.5466637Z","primaryEndpoints":{"blob":"https://testacc209.blob.core.windows.net/","queue":"https://testacc209.queue.core.windows.net/","table":"https://testacc209.table.core.windows.net/","file":"https://testacc209.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cloud-shell-storage-westus/providers/Microsoft.Storage/storageAccounts/cs400977cdb163fx435fx9c3","name":"cs400977cdb163fx435fx9c3","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"ms-resource-usage":"azure-cloud-shell"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-10-31T20:15:56.3292318Z","primaryEndpoints":{"blob":"https://cs400977cdb163fx435fx9c3.blob.core.windows.net/","queue":"https://cs400977cdb163fx435fx9c3.queue.core.windows.net/","table":"https://cs400977cdb163fx435fx9c3.table.core.windows.net/","file":"https://cs400977cdb163fx435fx9c3.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgwgjgodisz2vcsd55l3bixhutc5fbnyeyjuyatvgcv5k7sfzmxd6q2w4krnuq53zb7/providers/Microsoft.Storage/storageAccounts/clitestwwftaylvfj7kendae","name":"clitestwwftaylvfj7kendae","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:22:09.5983536Z","primaryEndpoints":{"blob":"https://clitestwwftaylvfj7kendae.blob.core.windows.net/","queue":"https://clitestwwftaylvfj7kendae.queue.core.windows.net/","table":"https://clitestwwftaylvfj7kendae.table.core.windows.net/","file":"https://clitestwwftaylvfj7kendae.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ziptxtdepl51/providers/Microsoft.Storage/storageAccounts/36y3ij42opovcstandardsa","name":"36y3ij42opovcstandardsa","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1054140Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1054140Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-15T01:53:43.4548265Z","primaryEndpoints":{"blob":"https://36y3ij42opovcstandardsa.blob.core.windows.net/","queue":"https://36y3ij42opovcstandardsa.queue.core.windows.net/","table":"https://36y3ij42opovcstandardsa.table.core.windows.net/","file":"https://36y3ij42opovcstandardsa.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitestb21","name":"zitestb21","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0656866Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0656866Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-08-23T20:10:50.2990885Z","primaryEndpoints":{"blob":"https://zitestb21.blob.core.windows.net/","queue":"https://zitestb21.queue.core.windows.net/","table":"https://zitestb21.table.core.windows.net/","file":"https://zitestb21.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy891","name":"foozy891","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2147571Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2147571Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-08T00:35:23.7925542Z","primaryEndpoints":{"blob":"https://foozy891.blob.core.windows.net/","queue":"https://foozy891.queue.core.windows.net/","table":"https://foozy891.table.core.windows.net/","file":"https://foozy891.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgh73m2h6rniak5bbqyrad43luxpotdofmlndof5secsxxee53kwocysqnklf4bn7yd/providers/Microsoft.Storage/storageAccounts/clitesttohpa6d65i7atctbm","name":"clitesttohpa6d65i7atctbm","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1678828Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:05:15.5574981Z","primaryEndpoints":{"blob":"https://clitesttohpa6d65i7atctbm.blob.core.windows.net/","queue":"https://clitesttohpa6d65i7atctbm.queue.core.windows.net/","table":"https://clitesttohpa6d65i7atctbm.table.core.windows.net/","file":"https://clitesttohpa6d65i7atctbm.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgzgkjvgqueh6ylbuj5ktuxx6m6njxoabzpow65vpyumzmtjctna2jgz5lg2ggslj7v/providers/Microsoft.Storage/storageAccounts/clitestncgrg5ytsvot5spgf","name":"clitestncgrg5ytsvot5spgf","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:27.7307380Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:27.7307380Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:27.5276141Z","primaryEndpoints":{"blob":"https://clitestncgrg5ytsvot5spgf.blob.core.windows.net/","queue":"https://clitestncgrg5ytsvot5spgf.queue.core.windows.net/","table":"https://clitestncgrg5ytsvot5spgf.table.core.windows.net/","file":"https://clitestncgrg5ytsvot5spgf.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:18.3231444Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:18.3231444Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:48:18.2450195Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ZiTest/providers/Microsoft.Storage/storageAccounts/ztesty3456","name":"ztesty3456","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-13T01:01:13.5308331Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-13T01:01:13.5308331Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-01-13T01:01:13.4995571Z","primaryEndpoints":{"blob":"https://ztesty3456.blob.core.windows.net/","queue":"https://ztesty3456.queue.core.windows.net/","table":"https://ztesty3456.table.core.windows.net/","file":"https://ztesty3456.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003","name":"clitest000003","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:37.4795170Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:37.4795170Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:48:37.3857709Z","primaryEndpoints":{"blob":"https://clitest000003.blob.core.windows.net/","queue":"https://clitest000003.queue.core.windows.net/","table":"https://clitest000003.table.core.windows.net/","file":"https://clitest000003.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/some-unique-rg-name-second/providers/Microsoft.Storage/storageAccounts/tianosatest79","name":"tianosatest79","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:46.6281789Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:46.6281789Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-05-24T23:16:33.9028352Z","primaryEndpoints":{"blob":"https://tianosatest79.blob.core.windows.net/","queue":"https://tianosatest79.queue.core.windows.net/","table":"https://tianosatest79.table.core.windows.net/","file":"https://tianosatest79.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy894","name":"foozy894","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2303818Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.2303818Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-08T00:39:03.09634Z","primaryEndpoints":{"blob":"https://foozy894.blob.core.windows.net/","queue":"https://foozy894.queue.core.windows.net/","table":"https://foozy894.table.core.windows.net/","file":"https://foozy894.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg7175/providers/Microsoft.Storage/storageAccounts/testacc7447","name":"testacc7447","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4719947Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4719947Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-21T19:13:51.907911Z","primaryEndpoints":{"blob":"https://testacc7447.blob.core.windows.net/","queue":"https://testacc7447.queue.core.windows.net/","table":"https://testacc7447.table.core.windows.net/","file":"https://testacc7447.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitesta21","name":"zitesta21","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0344305Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0344305Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-08-23T20:01:18.8418933Z","primaryEndpoints":{"blob":"https://zitesta21.blob.core.windows.net/","queue":"https://zitesta21.queue.core.windows.net/","table":"https://zitesta21.table.core.windows.net/","file":"https://zitesta21.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgcmxzjqe2ev2tarnzledhk4m7mk5dsnxznyqtyvx7dixjnjgqs4h5dh37jqoyzj5l5/providers/Microsoft.Storage/storageAccounts/cliteste7bmlfupz34m23jnc","name":"cliteste7bmlfupz34m23jnc","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1366608Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1366608Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-12-11T00:17:56.913505Z","primaryEndpoints":{"blob":"https://cliteste7bmlfupz34m23jnc.blob.core.windows.net/","queue":"https://cliteste7bmlfupz34m23jnc.queue.core.windows.net/","table":"https://cliteste7bmlfupz34m23jnc.table.core.windows.net/","file":"https://cliteste7bmlfupz34m23jnc.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg9639/providers/Microsoft.Storage/storageAccounts/testacc3070","name":"testacc3070","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.3469905Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.3469905Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-21T18:42:53.9505428Z","primaryEndpoints":{"blob":"https://testacc3070.blob.core.windows.net/","queue":"https://testacc3070.queue.core.windows.net/","table":"https://testacc3070.table.core.windows.net/","file":"https://testacc3070.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/zitesty21","name":"zitesty21","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0969536Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:11:00.0969536Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-08-23T19:55:37.1159138Z","primaryEndpoints":{"blob":"https://zitesty21.blob.core.windows.net/","queue":"https://zitesty21.queue.core.windows.net/","table":"https://zitesty21.table.core.windows.net/","file":"https://zitesty21.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg3787/providers/Microsoft.Storage/storageAccounts/testacc5739","name":"testacc5739","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4406899Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4406899Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-21T02:06:37.3496304Z","primaryEndpoints":{"blob":"https://testacc5739.blob.core.windows.net/","queue":"https://testacc5739.queue.core.windows.net/","table":"https://testacc5739.table.core.windows.net/","file":"https://testacc5739.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg8761/providers/Microsoft.Storage/storageAccounts/testacc3915","name":"testacc3915","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4094279Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-27T09:10:45.4094279Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-21T01:35:41.2354283Z","primaryEndpoints":{"blob":"https://testacc3915.blob.core.windows.net/","queue":"https://testacc3915.queue.core.windows.net/","table":"https://testacc3915.table.core.windows.net/","file":"https://testacc3915.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/foozap002/providers/Microsoft.Storage/storageAccounts/foozy89","name":"foozy89","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{"key1":"value1","key2":"value2"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1991330Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1991330Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-07-07T22:15:52.1441975Z","primaryEndpoints":{"blob":"https://foozy89.blob.core.windows.net/","queue":"https://foozy89.queue.core.windows.net/","table":"https://foozy89.table.core.windows.net/","file":"https://foozy89.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxgroupdiag169","name":"wilxgroupdiag169","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-29T22:34:01.9561177Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-29T22:34:01.9561177Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-29T22:34:01.8935895Z","primaryEndpoints":{"blob":"https://wilxgroupdiag169.blob.core.windows.net/","queue":"https://wilxgroupdiag169.queue.core.windows.net/","table":"https://wilxgroupdiag169.table.core.windows.net/","file":"https://wilxgroupdiag169.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Premium_LRS","tier":"Premium"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxgroupdisks899","name":"wilxgroupdisks899","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-11T23:26:25.3653337Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-11T23:26:25.3653337Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-11T23:26:25.2872072Z","primaryEndpoints":{"blob":"https://wilxgroupdisks899.blob.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg6sqzt5phdo5viklk7dquteui74rn3vn2tioolq5dsdnz2znxn6fdwaa47uyu2i4eg/providers/Microsoft.Storage/storageAccounts/clitestgjx5vdkyf74377ieg","name":"clitestgjx5vdkyf74377ieg","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1366608Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:59.1366608Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-11-26T06:09:48.4001597Z","primaryEndpoints":{"blob":"https://clitestgjx5vdkyf74377ieg.blob.core.windows.net/","queue":"https://clitestgjx5vdkyf74377ieg.queue.core.windows.net/","table":"https://clitestgjx5vdkyf74377ieg.table.core.windows.net/","file":"https://clitestgjx5vdkyf74377ieg.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup/providers/Microsoft.Storage/storageAccounts/wilxstorage","name":"wilxstorage","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-15T17:47:45.4399402Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-15T17:47:45.4399402Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-15T17:47:45.3930700Z","primaryEndpoints":{"blob":"https://wilxstorage.blob.core.windows.net/","queue":"https://wilxstorage.queue.core.windows.net/","table":"https://wilxstorage.table.core.windows.net/","file":"https://wilxstorage.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorage-secondary.blob.core.windows.net/","queue":"https://wilxstorage-secondary.queue.core.windows.net/","table":"https://wilxstorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/zitest/providers/Microsoft.Storage/storageAccounts/foostore12978","name":"foostore12978","type":"Microsoft.Storage/storageAccounts","location":"westeurope","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-22T22:18:07.1937355Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-22T22:18:07.1937355Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2016-04-29T06:55:06.4412159Z","primaryEndpoints":{"blob":"https://foostore12978.blob.core.windows.net/","queue":"https://foostore12978.queue.core.windows.net/","table":"https://foostore12978.table.core.windows.net/","file":"https://foostore12978.file.core.windows.net/"},"primaryLocation":"westeurope","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"BlobStorage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/t-chwong/providers/Microsoft.Storage/storageAccounts/tchwong","name":"tchwong","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-01T18:07:07.4006066Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-01T18:07:07.4006066Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-03-01T18:07:07.3381076Z","primaryEndpoints":{"blob":"https://tchwong.blob.core.windows.net/","table":"https://tchwong.table.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestlab1/providers/Microsoft.Storage/storageAccounts/acliautomationlab8902","name":"acliautomationlab8902","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{"hidden-DevTestLabs-LabUId":"ca9ec547-32c5-422d-b3d2-25906ed71959"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T16:51:47.2662871Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T16:51:47.2662871Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T16:51:47.2194106Z","primaryEndpoints":{"blob":"https://acliautomationlab8902.blob.core.windows.net/","queue":"https://acliautomationlab8902.queue.core.windows.net/","table":"https://acliautomationlab8902.table.core.windows.net/","file":"https://acliautomationlab8902.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"identity":{"principalId":"ebc8557b-5159-4db6-8b04-699759875130","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgls6pde2luhubksnkjxebnrqthsdi6dcfpxcrhlmgnvdkkimk6b2usub6ehq3ocrsm/providers/Microsoft.Storage/storageAccounts/clitesttrevle6ezqkjtfdl3","name":"clitesttrevle6ezqkjtfdl3","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-14T22:32:56.5552622Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-14T22:32:56.5552622Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-14T22:32:56.5084099Z","primaryEndpoints":{"blob":"https://clitesttrevle6ezqkjtfdl3.blob.core.windows.net/","queue":"https://clitesttrevle6ezqkjtfdl3.queue.core.windows.net/","table":"https://clitesttrevle6ezqkjtfdl3.table.core.windows.net/","file":"https://clitesttrevle6ezqkjtfdl3.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/lmazuel-testfunction-msi/providers/Microsoft.Storage/storageAccounts/lmazueltestfuncbbd8","name":"lmazueltestfuncbbd8","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1691771Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1691771Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-10-11T19:03:26.3781645Z","primaryEndpoints":{"blob":"https://lmazueltestfuncbbd8.blob.core.windows.net/","queue":"https://lmazueltestfuncbbd8.queue.core.windows.net/","table":"https://lmazueltestfuncbbd8.table.core.windows.net/","file":"https://lmazueltestfuncbbd8.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cloud-shell-storage-southcentralus/providers/Microsoft.Storage/storageAccounts/cs700977cdb163fx435fx9c3","name":"cs700977cdb163fx435fx9c3","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{"ms-resource-usage":"azure-cloud-shell"},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1691771Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1691771Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-08-09T21:59:02.7061936Z","primaryEndpoints":{"blob":"https://cs700977cdb163fx435fx9c3.blob.core.windows.net/","queue":"https://cs700977cdb163fx435fx9c3.queue.core.windows.net/","table":"https://cs700977cdb163fx435fx9c3.table.core.windows.net/","file":"https://cs700977cdb163fx435fx9c3.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/t-chwong/providers/Microsoft.Storage/storageAccounts/tchwongdiag300","name":"tchwongdiag300","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-20T18:15:54.9483325Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-20T18:15:54.9483325Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-20T18:15:54.8858351Z","primaryEndpoints":{"blob":"https://tchwongdiag300.blob.core.windows.net/","queue":"https://tchwongdiag300.queue.core.windows.net/","table":"https://tchwongdiag300.table.core.windows.net/","file":"https://tchwongdiag300.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_GRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/azurefunctions-southcentralus/providers/Microsoft.Storage/storageAccounts/azurefunctions2e2e624d","name":"azurefunctions2e2e624d","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1535349Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-01-08T22:33:58.1535349Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2017-09-22T21:04:32.5702152Z","primaryEndpoints":{"blob":"https://azurefunctions2e2e624d.blob.core.windows.net/","queue":"https://azurefunctions2e2e624d.queue.core.windows.net/","table":"https://azurefunctions2e2e624d.table.core.windows.net/","file":"https://azurefunctions2e2e624d.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available","secondaryLocation":"northcentralus","statusOfSecondary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup2/providers/Microsoft.Storage/storageAccounts/wilxstorage0","name":"wilxstorage0","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-13T01:05:28.4648959Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-13T01:05:28.4648959Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2018-04-13T01:05:28.4023820Z","primaryEndpoints":{"blob":"https://wilxstorage0.blob.core.windows.net/","queue":"https://wilxstorage0.queue.core.windows.net/","table":"https://wilxstorage0.table.core.windows.net/","file":"https://wilxstorage0.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgmr6jo34yofyafj3n6gjbhrgmrd6pwgguthc2u235qfle6y6ztyzrlkuqn544s7cop/providers/Microsoft.Storage/storageAccounts/clitestnlmd52jlcmr4ce7b4","name":"clitestnlmd52jlcmr4ce7b4","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T20:14:07.3500611Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T20:14:07.3500611Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T20:14:07.3188286Z","primaryEndpoints":{"blob":"https://clitestnlmd52jlcmr4ce7b4.blob.core.windows.net/","queue":"https://clitestnlmd52jlcmr4ce7b4.queue.core.windows.net/","table":"https://clitestnlmd52jlcmr4ce7b4.table.core.windows.net/","file":"https://clitestnlmd52jlcmr4ce7b4.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup3/providers/Microsoft.Storage/storageAccounts/wilxstorageworm","name":"wilxstorageworm","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-13T22:36:53.1534839Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-13T22:36:53.1534839Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-13T22:36:53.0909769Z","primaryEndpoints":{"blob":"https://wilxstorageworm.blob.core.windows.net/","queue":"https://wilxstorageworm.queue.core.windows.net/","table":"https://wilxstorageworm.table.core.windows.net/","file":"https://wilxstorageworm.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available","secondaryLocation":"centraluseuap","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorageworm-secondary.blob.core.windows.net/","queue":"https://wilxstorageworm-secondary.queue.core.windows.net/","table":"https://wilxstorageworm-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg326oxnqqn33y3n42vz6x5xol5rvvw3z4o6tladwwtkmcntnsxhhxxtddtrxwm2edj/providers/Microsoft.Storage/storageAccounts/clitestjwzkdsfuou3niutbd","name":"clitestjwzkdsfuou3niutbd","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T20:07:33.1021018Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T20:07:33.1021018Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T20:07:33.0552270Z","primaryEndpoints":{"blob":"https://clitestjwzkdsfuou3niutbd.blob.core.windows.net/","queue":"https://clitestjwzkdsfuou3niutbd.queue.core.windows.net/","table":"https://clitestjwzkdsfuou3niutbd.table.core.windows.net/","file":"https://clitestjwzkdsfuou3niutbd.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgldagdmcl4pklmwzmr3wftx2kidhw7johz6d7tl6m7raetzzfhpqhrfffu5vwqtfxo/providers/Microsoft.Storage/storageAccounts/clitestt6pqb7xneswrh2sp6","name":"clitestt6pqb7xneswrh2sp6","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T17:51:14.8730435Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T17:51:14.8730435Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T17:51:14.8105336Z","primaryEndpoints":{"blob":"https://clitestt6pqb7xneswrh2sp6.blob.core.windows.net/","queue":"https://clitestt6pqb7xneswrh2sp6.queue.core.windows.net/","table":"https://clitestt6pqb7xneswrh2sp6.table.core.windows.net/","file":"https://clitestt6pqb7xneswrh2sp6.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgf3er5m4irbxsxhyil42jxq3t5ehzphmdzn2gortdlrzyw4i6tlgswx2xrcgldp6oh/providers/Microsoft.Storage/storageAccounts/clitestpabilv4yd6qxvguml","name":"clitestpabilv4yd6qxvguml","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T19:20:22.2758006Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T19:20:22.2758006Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T19:20:22.2445526Z","primaryEndpoints":{"blob":"https://clitestpabilv4yd6qxvguml.blob.core.windows.net/","queue":"https://clitestpabilv4yd6qxvguml.queue.core.windows.net/","table":"https://clitestpabilv4yd6qxvguml.table.core.windows.net/","file":"https://clitestpabilv4yd6qxvguml.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgwxiadyatfxsixayqfinia7ybjwo5cfoyw65qpuna3alx3x2diwukx4tkcpwir2mbq/providers/Microsoft.Storage/storageAccounts/clitesta2lvllqz23rgasyf7","name":"clitesta2lvllqz23rgasyf7","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T17:57:25.6818153Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T17:57:25.6818153Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T17:57:25.6193002Z","primaryEndpoints":{"blob":"https://clitesta2lvllqz23rgasyf7.blob.core.windows.net/","queue":"https://clitesta2lvllqz23rgasyf7.queue.core.windows.net/","table":"https://clitesta2lvllqz23rgasyf7.table.core.windows.net/","file":"https://clitesta2lvllqz23rgasyf7.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgoo2qxqtbb56w7uujqzhodrozdh7fxg5wxscql4ndybxkardgqzqvheltadic2zoxf/providers/Microsoft.Storage/storageAccounts/clitestfyixx74gs3loj3isf","name":"clitestfyixx74gs3loj3isf","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T20:34:26.6293927Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T20:34:26.6293927Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T20:34:26.5668681Z","primaryEndpoints":{"blob":"https://clitestfyixx74gs3loj3isf.blob.core.windows.net/","queue":"https://clitestfyixx74gs3loj3isf.queue.core.windows.net/","table":"https://clitestfyixx74gs3loj3isf.table.core.windows.net/","file":"https://clitestfyixx74gs3loj3isf.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgd5ygu6mbq43qw57ncgznekmhwaqlrowjc6dggyk2h6cfwioigvtt3bg7ayqckcwvk/providers/Microsoft.Storage/storageAccounts/clitestixsogcl5p5af5w2p3","name":"clitestixsogcl5p5af5w2p3","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T18:00:02.2397791Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T18:00:02.2397791Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T18:00:02.2087326Z","primaryEndpoints":{"blob":"https://clitestixsogcl5p5af5w2p3.blob.core.windows.net/","queue":"https://clitestixsogcl5p5af5w2p3.queue.core.windows.net/","table":"https://clitestixsogcl5p5af5w2p3.table.core.windows.net/","file":"https://clitestixsogcl5p5af5w2p3.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wilxgroup3/providers/Microsoft.Storage/storageAccounts/wilxstorageblah","name":"wilxstorageblah","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-17T20:06:51.4259719Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-17T20:06:51.4259719Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-17T20:06:51.3790974Z","primaryEndpoints":{"blob":"https://wilxstorageblah.blob.core.windows.net/","queue":"https://wilxstorageblah.queue.core.windows.net/","table":"https://wilxstorageblah.table.core.windows.net/","file":"https://wilxstorageblah.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available","secondaryLocation":"centraluseuap","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://wilxstorageblah-secondary.blob.core.windows.net/","queue":"https://wilxstorageblah-secondary.queue.core.windows.net/","table":"https://wilxstorageblah-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgeyg7p46zydk24opv23uowejjybhvp2nqcyqpnmknbs7o3w5c3tocuuygkogbvxz5f/providers/Microsoft.Storage/storageAccounts/clitestcrdofae6jvibomf2w","name":"clitestcrdofae6jvibomf2w","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-20T01:19:55.8214506Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-20T01:19:55.8214506Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-20T01:19:55.7120798Z","primaryEndpoints":{"blob":"https://clitestcrdofae6jvibomf2w.blob.core.windows.net/","queue":"https://clitestcrdofae6jvibomf2w.queue.core.windows.net/","table":"https://clitestcrdofae6jvibomf2w.table.core.windows.net/","file":"https://clitestcrdofae6jvibomf2w.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rgeblmtd6pv6car44ga6qwvicwjyuxydhhkaharam4nad6uekgqgm2uiisw7v4a3czx/providers/Microsoft.Storage/storageAccounts/clitestcdx4bwlcvgviotc2p","name":"clitestcdx4bwlcvgviotc2p","type":"Microsoft.Storage/storageAccounts","location":"eastus2euap","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-19T22:26:49.0369320Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-19T22:26:49.0369320Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-19T22:26:48.9744081Z","primaryEndpoints":{"blob":"https://clitestcdx4bwlcvgviotc2p.blob.core.windows.net/","queue":"https://clitestcdx4bwlcvgviotc2p.queue.core.windows.net/","table":"https://clitestcdx4bwlcvgviotc2p.table.core.windows.net/","file":"https://clitestcdx4bwlcvgviotc2p.file.core.windows.net/"},"primaryLocation":"eastus2euap","statusOfPrimary":"available"}}]}'} headers: cache-control: [no-cache] - content-length: ['102942'] + content-length: ['90663'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:12:33 GMT'] + date: ['Tue, 01 May 2018 21:48:56 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] vary: [Accept-Encoding] - x-ms-original-request-ids: [7bde2112-007f-4b81-8695-b12c1845475c, 9ac45548-9f9a-4086-87f1-edf0ce8c55f1, - a535daab-2df2-4364-a409-dfd6f97573ff] + x-content-type-options: [nosniff] + x-ms-original-request-ids: [84952941-ed5a-414e-b505-85a49764de4e, 775c6a87-b6b4-44fa-8471-51bd67c524e9, + 3aff7d4f-2004-49b9-bb1d-ad3757db59f3, 337cb911-05a4-4566-a36c-4dc902966df3, + 11991e36-7a48-4abb-86d5-8b5d87913636, f36c456a-beed-4002-a66b-f8d1dacadc0c, + b8b72007-5ec6-4d2b-92e6-bb9b9161bfca] status: {code: 200, message: OK} - request: body: null @@ -266,8 +250,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -276,11 +260,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:12:34 GMT'] + date: ['Tue, 01 May 2018 21:48:57 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdQTEFKTVJSRk5aV0tKM0ZDVjZLWTc0QVlHQlNONTI1V1pVWnw5Qzg5OUMyOUY2NjJGOUUzLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdLSURPNTRVNTVEV0hQUU9ITUNFM0YyVUI0M0JFU1NWRVBIV3w4MzA4NzY5OEU3NjQ5MkMxLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1188'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_logging_operations.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_logging_operations.yaml index 118979aee44..2876eda243f 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_logging_operations.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_logging_operations.yaml @@ -1,43 +1,45 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "eastus2", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-02T00:05:52Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['111'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"eastus2","tags":{"product":"azurecli","cause":"automation","date":"2018-05-02T00:05:52Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['385'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:12:35 GMT'] + date: ['Wed, 02 May 2018 00:05:54 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1188'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 201, message: Created} - request: - body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", + body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "eastus2", "properties": {"supportsHttpsTrafficOnly": false}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [storage account create] Connection: [keep-alive] - Content-Length: ['125'] + Content-Length: ['126'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:12:36 GMT'] + date: ['Wed, 02 May 2018 00:05:57 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/bcaf28f7-9d0d-4d86-a13f-7bff77542cd9?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/eastus2/asyncoperations/aa00d0bc-b1ea-49ae-894b-206785dde9a1?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/bcaf28f7-9d0d-4d86-a13f-7bff77542cd9?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/eastus2/asyncoperations/aa00d0bc-b1ea-49ae-894b-206785dde9a1?monitor=true&api-version=2017-10-01 response: - body: {string: ''} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"eastus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-02T00:05:57.4340385Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-02T00:05:57.4340385Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-02T00:05:57.1840317Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"eastus2","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:12:54 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/bcaf28f7-9d0d-4d86-a13f-7bff77542cd9?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/bcaf28f7-9d0d-4d86-a13f-7bff77542cd9?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:36.6221437Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:12:36.6221437Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:12:36.5596728Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} - headers: - cache-control: [no-cache] - content-length: ['1231'] + content-length: ['1233'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:13:11 GMT'] + date: ['Wed, 02 May 2018 00:06:15 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"6qR6dKj7g7RTJoDWdCk7rW0nYYiL9eDdBVhouJi6thVrYSX2EOx+10CulCihWLGD3eq8MIs9JZyyaarTcYg8tQ==","permissions":"FULL"},{"keyName":"key2","value":"nlU0j3NKXYpGzHYeqKVlkbEIBTj5TmjObc+Zxu7uiILrjATh6/oEdvhlPaIPFr7hZTGRYLh0jEIRlO6gMtJsDA==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"q0gHRpLyuUQQzq7YTxniF8sTj5wYCVg2zd2wsw68/nQNmKsEy22aUpIXGwircNRzbczHGYxIEQQ50pp4Jj9EqA==","permissions":"FULL"},{"keyName":"key2","value":"xITc2KcgaEZnIO9H6VzVCTIYWWnOyz1KEVTP8SJMsGxyVfYLmsiSim6UFovFH6hdtIo8j9fiCSMxNLI1tRr6FQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:13:12 GMT'] + date: ['Wed, 02 May 2018 00:06:15 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null @@ -151,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"6qR6dKj7g7RTJoDWdCk7rW0nYYiL9eDdBVhouJi6thVrYSX2EOx+10CulCihWLGD3eq8MIs9JZyyaarTcYg8tQ==","permissions":"FULL"},{"keyName":"key2","value":"nlU0j3NKXYpGzHYeqKVlkbEIBTj5TmjObc+Zxu7uiILrjATh6/oEdvhlPaIPFr7hZTGRYLh0jEIRlO6gMtJsDA==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"q0gHRpLyuUQQzq7YTxniF8sTj5wYCVg2zd2wsw68/nQNmKsEy22aUpIXGwircNRzbczHGYxIEQQ50pp4Jj9EqA==","permissions":"FULL"},{"keyName":"key2","value":"xITc2KcgaEZnIO9H6VzVCTIYWWnOyz1KEVTP8SJMsGxyVfYLmsiSim6UFovFH6hdtIo8j9fiCSMxNLI1tRr6FQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:13:12 GMT'] + date: ['Wed, 02 May 2018 00:06:17 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -169,26 +147,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1187'] - status: {code: 200, message: OK} -- request: - body: null - headers: - Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:13:13 GMT'] - x-ms-version: ['2017-07-29'] - method: GET - uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties - response: - body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalsefalse"} - headers: - content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:13:13 GMT'] - server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] - transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: null @@ -196,8 +156,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:13:13 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:06:17 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/?restype=service&comp=properties @@ -206,7 +166,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:13:12 GMT'] + date: ['Wed, 02 May 2018 00:06:17 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -215,9 +175,10 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:13:13 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:06:18 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties response: @@ -226,58 +187,60 @@ interactions: headers: cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:13:13 GMT'] + date: ['Wed, 02 May 2018 00:06:18 GMT'] server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: - body: ' - - 1.0FalseTrueFalseTrue1' + body: null headers: Connection: [keep-alive] - Content-Length: ['264'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:13:13 GMT'] - x-ms-version: ['2017-07-29'] - method: PUT + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:06:18 GMT'] + x-ms-version: ['2017-11-09'] + method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: - body: {string: ''} + body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalsefalse"} headers: - date: ['Thu, 08 Feb 2018 18:13:13 GMT'] + content-type: [application/xml] + date: ['Wed, 02 May 2018 00:06:18 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] - status: {code: 202, message: Accepted} + x-ms-version: ['2017-11-09'] + status: {code: 200, message: OK} - request: - body: null + body: ' + + 1.0FalseTrueFalseTrue1' headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:13:14 GMT'] - x-ms-version: ['2017-07-29'] - method: GET + Content-Length: ['264'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:06:19 GMT'] + x-ms-version: ['2017-11-09'] + method: PUT uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: - body: {string: "\uFEFF1.0truefalsefalsetrue11.0truetruetrue71.0falsefalsefalse"} + body: {string: ''} headers: - content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:13:14 GMT'] + date: ['Wed, 02 May 2018 00:06:19 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] - status: {code: 200, message: OK} + x-ms-version: ['2017-11-09'] + status: {code: 202, message: Accepted} - request: body: null headers: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:13:14 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:06:19 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/?restype=service&comp=properties @@ -286,7 +249,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:13:15 GMT'] + date: ['Wed, 02 May 2018 00:06:19 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -295,9 +258,10 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:13:14 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:06:20 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties response: @@ -306,10 +270,30 @@ interactions: headers: cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:13:15 GMT'] + date: ['Wed, 02 May 2018 00:06:20 GMT'] server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Connection: [keep-alive] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:06:20 GMT'] + x-ms-version: ['2017-11-09'] + method: GET + uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties + response: + body: {string: "\uFEFF1.0truefalsefalsetrue11.0truetruetrue71.0falsefalsefalse"} + headers: + content-type: [application/xml] + date: ['Wed, 02 May 2018 00:06:20 GMT'] + server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] + transfer-encoding: [chunked] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null @@ -321,8 +305,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -331,11 +315,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:13:15 GMT'] + date: ['Wed, 02 May 2018 00:06:21 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkc3QjVYUFhBSFhUWUpaWUNFM1ZaUk5OR0dGSlpHMzNLR0pCRHxCMEQ2MzJDMDMxRUY0NkQyLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdPRFNKWDczU01TV0k0SUpKT1ZET0k1VlRTR1c0R0dBN1JHSHw2MThEM0Q0MTQxNDFGNDU1LUVBU1RVUzIiLCJqb2JMb2NhdGlvbiI6ImVhc3R1czIifQ?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1184'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_metrics_operations.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_metrics_operations.yaml index 71b96b29311..bb88126d078 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_metrics_operations.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_metrics_operations.yaml @@ -1,43 +1,45 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "eastus2", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-02T00:09:48Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['111'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"eastus2","tags":{"product":"azurecli","cause":"automation","date":"2018-05-02T00:09:48Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['385'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:32:30 GMT'] + date: ['Wed, 02 May 2018 00:09:50 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1193'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 201, message: Created} - request: - body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", + body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "eastus2", "properties": {"supportsHttpsTrafficOnly": false}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [storage account create] Connection: [keep-alive] - Content-Length: ['125'] + Content-Length: ['126'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:32:32 GMT'] + date: ['Wed, 02 May 2018 00:09:53 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b6bb4bdd-6dff-4ff0-9efa-47843f4032ea?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/eastus2/asyncoperations/61792499-c148-4e4b-ba7f-e624bd4b166c?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1176'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b6bb4bdd-6dff-4ff0-9efa-47843f4032ea?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/eastus2/asyncoperations/61792499-c148-4e4b-ba7f-e624bd4b166c?monitor=true&api-version=2017-10-01 response: - body: {string: ''} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"eastus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-02T00:09:53.4202268Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-02T00:09:53.4202268Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-02T00:09:53.3420553Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"eastus2","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:32:49 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b6bb4bdd-6dff-4ff0-9efa-47843f4032ea?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b6bb4bdd-6dff-4ff0-9efa-47843f4032ea?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:32:31.8011350Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:32:31.8011350Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:32:31.7698664Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} - headers: - cache-control: [no-cache] - content-length: ['1231'] + content-length: ['1233'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:33:06 GMT'] + date: ['Wed, 02 May 2018 00:10:10 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"RObavWU3Txtf+Kmxx6TExOxD8NvcCpDbw28MhX5A66oABUnf9+bOpp1YfckeeB+oPo8dUQvOelCgjhWPG+A64w==","permissions":"FULL"},{"keyName":"key2","value":"8wEWZv+WfhDBuf3mEzsAGcDW3xphAz93YmgwnoHqf3q0CXHi+9OR01OELlNK+fPJrDtRwaqzteG2/oMP3JUbqw==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"hQ8wjwvE8IPuEwJ01IPlXzxztd97kS3MtQMX++TD7XHWxiPVtjrdP65vrhjxndeFupFot5U1sZf7F4qPl6FZGw==","permissions":"FULL"},{"keyName":"key2","value":"7VoTC+AOT5FOtt5k9iF3NXkJxiC6FMGz259BkwXGWGXKjuaaK+QRbnHaRFW27040zpQ9c2p6wml64pwE28G0Mg==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:33:20 GMT'] + date: ['Wed, 02 May 2018 00:10:11 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1193'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null @@ -147,8 +125,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:20 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:10:12 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/?restype=service&comp=properties @@ -157,7 +135,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:20 GMT'] + date: ['Wed, 02 May 2018 00:10:12 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -166,9 +144,10 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:20 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:10:12 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties response: @@ -177,17 +156,18 @@ interactions: headers: cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:20 GMT'] + date: ['Wed, 02 May 2018 00:10:13 GMT'] server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:21 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:10:13 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties @@ -196,7 +176,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:21 GMT'] + date: ['Wed, 02 May 2018 00:10:13 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -205,9 +185,10 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:21 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:10:13 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -215,10 +196,10 @@ interactions: \ />false"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:21 GMT'] + date: ['Wed, 02 May 2018 00:10:14 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -227,15 +208,16 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['446'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:21 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:10:14 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:33:22 GMT'] + date: ['Wed, 02 May 2018 00:10:14 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -246,8 +228,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:22 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:10:15 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/?restype=service&comp=properties @@ -256,7 +238,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:22 GMT'] + date: ['Wed, 02 May 2018 00:10:14 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -265,9 +247,10 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:22 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:10:15 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties response: @@ -276,17 +259,18 @@ interactions: headers: cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:22 GMT'] + date: ['Wed, 02 May 2018 00:10:15 GMT'] server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:22 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:10:16 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties @@ -295,7 +279,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:22 GMT'] + date: ['Wed, 02 May 2018 00:10:16 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -304,9 +288,10 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:22 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 00:10:16 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -314,10 +299,10 @@ interactions: \ />false"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:22 GMT'] + date: ['Wed, 02 May 2018 00:10:16 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null @@ -329,8 +314,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -339,11 +324,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 19:33:23 GMT'] + date: ['Wed, 02 May 2018 00:10:17 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdaTFNKV0tHNUY1TEIzWjMyN0lWM01BNE5QSTNWSlBXSU1MWXw2N0Q3RkUzNjI2MDQzRTE5LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdJNFpCTkNaR1dPQkFURElPQ1FNQVlQTDdJR0NGQVlMVFdSWHw1REVGMjcwQkY2NzE4NTAzLUVBU1RVUzIiLCJqb2JMb2NhdGlvbiI6ImVhc3R1czIifQ?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1185'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_renew_account_key.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_renew_account_key.yaml index 399477a56a1..33b3a2fd15d 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_renew_account_key.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_renew_account_key.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:49:59Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:49:59Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:13:56 GMT'] + date: ['Tue, 01 May 2018 21:50:00 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:13:58 GMT'] + date: ['Tue, 01 May 2018 21:50:01 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/281ec227-7120-49d0-9c81-2c56b619ddda?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/2f1d275e-a16c-442b-988d-d3d6a4bdec29?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1183'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 202, message: Accepted} - request: body: null @@ -65,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/281ec227-7120-49d0-9c81-2c56b619ddda?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/2f1d275e-a16c-442b-988d-d3d6a4bdec29?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:13:58.2789270Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:13:58.2789270Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:13:58.2320462Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:01.6687806Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:01.6687806Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:01.5750003Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:14:15 GMT'] + date: ['Tue, 01 May 2018 21:50:18 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -83,6 +86,7 @@ interactions: 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: null @@ -94,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"3xm3m4nifDmOu5kPW4T5fs4JiFH88CHx64PJoT7BzbnA7UFM4Z3hp4FgpovR2JDQScNvz7Lj2pFD/OEGiOt29w==","permissions":"FULL"},{"keyName":"key2","value":"ToGf4g1TF0nk0H5fAkk1wfusicg6Ldu0RRMqdaBbt0bCcbqhtrmO7OvghZOk9fTHvTBJFq6xF9J8z54Ds7CFnQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"MsV6XNzsFn8Dl96ueZ/lOXAqx/BU7BWUUBpA93zqEFornsiyr249WEi5zUxunfFpw7moIE2NRbpbXO5Mh29ubQ==","permissions":"FULL"},{"keyName":"key2","value":"VhbqdaROJJJw09wrtPp7g/RU3v0zXjWpk809y/Qw8jYmZF2mVEcS23RzeH8/aK6pAT4nGJ8VttgrdAmB6NOYFQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:14:16 GMT'] + date: ['Tue, 01 May 2018 21:50:20 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -112,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: null @@ -124,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"3xm3m4nifDmOu5kPW4T5fs4JiFH88CHx64PJoT7BzbnA7UFM4Z3hp4FgpovR2JDQScNvz7Lj2pFD/OEGiOt29w==","permissions":"FULL"},{"keyName":"key2","value":"ToGf4g1TF0nk0H5fAkk1wfusicg6Ldu0RRMqdaBbt0bCcbqhtrmO7OvghZOk9fTHvTBJFq6xF9J8z54Ds7CFnQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"MsV6XNzsFn8Dl96ueZ/lOXAqx/BU7BWUUBpA93zqEFornsiyr249WEi5zUxunfFpw7moIE2NRbpbXO5Mh29ubQ==","permissions":"FULL"},{"keyName":"key2","value":"VhbqdaROJJJw09wrtPp7g/RU3v0zXjWpk809y/Qw8jYmZF2mVEcS23RzeH8/aK6pAT4nGJ8VttgrdAmB6NOYFQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:14:17 GMT'] + date: ['Tue, 01 May 2018 21:50:20 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -142,7 +147,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1178'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: '{"keyName": "key1"}' @@ -154,17 +160,17 @@ interactions: Content-Length: ['19'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/regenerateKey?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"zsSjGR13zJSd5H/ltEdVg3yQ0Vls02RxTSo8FVeO/N6DALFNtY5BEwMeTPsOInMyVcW44a+0fDuhw69f2I+KJA==","permissions":"FULL"},{"keyName":"key2","value":"ToGf4g1TF0nk0H5fAkk1wfusicg6Ldu0RRMqdaBbt0bCcbqhtrmO7OvghZOk9fTHvTBJFq6xF9J8z54Ds7CFnQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"z04E7jvrYBT1q/AX5nMFdlG50HB/EFdL1leVDPlMVGpIWeWVGY4RNpFNDedsj2jEAM7dRZDcMMKpIoK4S3RlpQ==","permissions":"FULL"},{"keyName":"key2","value":"VhbqdaROJJJw09wrtPp7g/RU3v0zXjWpk809y/Qw8jYmZF2mVEcS23RzeH8/aK6pAT4nGJ8VttgrdAmB6NOYFQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:14:18 GMT'] + date: ['Tue, 01 May 2018 21:50:21 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -172,7 +178,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1185'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: '{"keyName": "key2"}' @@ -184,17 +191,17 @@ interactions: Content-Length: ['19'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/regenerateKey?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"zsSjGR13zJSd5H/ltEdVg3yQ0Vls02RxTSo8FVeO/N6DALFNtY5BEwMeTPsOInMyVcW44a+0fDuhw69f2I+KJA==","permissions":"FULL"},{"keyName":"key2","value":"m6NUobJdfogdBMTZ/QPBic/8kl3YRg2VHXCn1knr+vf3wug2En0roOFcX79V4r049TjeC9bgTyIfc25evysfmg==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"z04E7jvrYBT1q/AX5nMFdlG50HB/EFdL1leVDPlMVGpIWeWVGY4RNpFNDedsj2jEAM7dRZDcMMKpIoK4S3RlpQ==","permissions":"FULL"},{"keyName":"key2","value":"Wx2HXjV5wMAlNoiXVBAxeFceQezAM2KPkkoIPtA8iBNWJuBVOgGbx2KgPKCJ0JFDeSzdCxRl5DoAtULhUmYYGQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:14:18 GMT'] + date: ['Tue, 01 May 2018 21:50:21 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -202,7 +209,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1175'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: null @@ -214,8 +222,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -224,11 +232,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:14:18 GMT'] + date: ['Tue, 01 May 2018 21:50:21 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkcyRVFJV1lCMklZVEVCVDdCTUNWNktSSTY2QkxOTVhXNVlZRHw1MUIyRDA4MjVEMURBN0QwLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkcyU1E3R0Q2N1JNMjdDWjNMQ0pZRkFNUUo0MlBVVk1HUDYzSXxFODI1Q0Q5NkZGQkQyREQ5LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1182'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1194'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_show_usage.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_show_usage.yaml index fad67c18501..c279d7f78a6 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_show_usage.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_show_usage.yaml @@ -8,25 +8,26 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/usages?api-version=2017-10-01 response: body: {string: "{\r\n \"value\": [\r\n {\r\n \"unit\": \"Count\",\r\n\ - \ \"currentValue\": 24,\r\n \"limit\": 250,\r\n \"name\": {\r\ + \ \"currentValue\": 32,\r\n \"limit\": 250,\r\n \"name\": {\r\ \n \"value\": \"StorageAccounts\",\r\n \"localizedValue\": \"\ Storage Accounts\"\r\n }\r\n }\r\n ]\r\n}"} headers: cache-control: [no-cache] content-length: ['218'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:14:19 GMT'] + date: ['Tue, 01 May 2018 21:50:22 GMT'] expires: ['-1'] pragma: [no-cache] server: [Microsoft-Azure-Storage-Resource-Provider/1.0, Microsoft-HTTPAPI/2.0] strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] + x-content-type-options: [nosniff] status: {code: 200, message: OK} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_account_service_endpoints.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_account_service_endpoints.yaml index 6fe04e5a254..66a8ac84564 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_account_service_endpoints.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_account_service_endpoints.yaml @@ -1,7 +1,7 @@ interactions: - request: body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", - "date": "2018-04-04T18:19:44Z"}}' + "date": "2018-05-01T21:50:23Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] @@ -9,24 +9,24 @@ interactions: Connection: [keep-alive] Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_storage_service_endpoints000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001","name":"cli_test_storage_service_endpoints000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-04-04T18:19:44Z"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001","name":"cli_test_storage_service_endpoints000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:50:23Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:19:46 GMT'] + date: ['Tue, 01 May 2018 21:50:23 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1197'] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -38,8 +38,8 @@ interactions: Connection: [keep-alive] Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -49,15 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:19:46 GMT'] + date: ['Tue, 01 May 2018 21:50:25 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/9a04cc40-3dd0-4e90-a686-c099c71787ca?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/7fa7210c-232e-41fc-95a4-2c74404a9d16?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1197'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 202, message: Accepted} - request: body: null @@ -67,18 +67,18 @@ interactions: CommandName: [storage account create] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/9a04cc40-3dd0-4e90-a686-c099c71787ca?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/7fa7210c-232e-41fc-95a4-2c74404a9d16?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:04 GMT'] + date: ['Tue, 01 May 2018 21:50:41 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -97,18 +97,18 @@ interactions: Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"vdsU97P3F2fUyGLcN8CGKwJdmI0/qApTFXNyFqtmjlNqUU6NUHYzO7XCDI9hNQ+xD2Pesvq5V6NNGBpuNOLZ4A==","permissions":"FULL"},{"keyName":"key2","value":"onGSdrdU4VyZ9l7mlBKYb95zgcMENkmvs/jJKkaV5XPIoR7dRJ5IfHwwQtmPUiQVruFgvdqt5OALKBFHYcLD7w==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"qWOSwO1BVzgMfrWqXaYHDfEZuzviUAd9vNxnv+kxHY/sQvIbDhcByrFMSbeBBEbkdz+55p6bUPJmXSdjdNNtVg==","permissions":"FULL"},{"keyName":"key2","value":"Dpx3hse6j7dQQ3EWvIbIU5c0it8ICT5oNyVuJ+HJ0En485eXvJGZpJ6yYrz30YmpajDslBBxYyrfpJ17NAxJ/w==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:05 GMT'] + date: ['Tue, 01 May 2018 21:50:42 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -117,7 +117,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null @@ -127,19 +127,19 @@ interactions: CommandName: [storage account create] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_storage_service_endpoints000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001","name":"cli_test_storage_service_endpoints000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-04-04T18:19:44Z"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001","name":"cli_test_storage_service_endpoints000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:50:23Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:20:05 GMT'] + date: ['Tue, 01 May 2018 21:50:44 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] @@ -157,18 +157,18 @@ interactions: Connection: [keep-alive] Content-Length: ['190'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Metrics","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Metrics","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1478'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:07 GMT'] + date: ['Tue, 01 May 2018 21:50:44 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -187,18 +187,18 @@ interactions: CommandName: [storage account update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Metrics","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Metrics","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1478'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:07 GMT'] + date: ['Tue, 01 May 2018 21:50:44 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -220,18 +220,18 @@ interactions: Connection: [keep-alive] Content-Length: ['322'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1479'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:08 GMT'] + date: ['Tue, 01 May 2018 21:50:45 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -240,7 +240,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1195'] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: null @@ -250,18 +250,18 @@ interactions: CommandName: [storage account update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1479'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:09 GMT'] + date: ['Tue, 01 May 2018 21:50:46 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -283,18 +283,18 @@ interactions: Connection: [keep-alive] Content-Length: ['321'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1478'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:10 GMT'] + date: ['Tue, 01 May 2018 21:50:46 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -303,7 +303,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -313,19 +313,19 @@ interactions: CommandName: [network vnet create] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_storage_service_endpoints000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001","name":"cli_test_storage_service_endpoints000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-04-04T18:19:44Z"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001","name":"cli_test_storage_service_endpoints000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:50:23Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:20:10 GMT'] + date: ['Tue, 01 May 2018 21:50:51 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] @@ -343,33 +343,33 @@ interactions: Connection: [keep-alive] Content-Length: ['205'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 networkmanagementclient/2.0.0rc2 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1?api-version=2018-02-01 response: body: {string: "{\r\n \"name\": \"vnet1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1\"\ - ,\r\n \"etag\": \"W/\\\"5d72da09-4ebd-475b-8531-2ee87d015f8e\\\"\",\r\n \ + ,\r\n \"etag\": \"W/\\\"7caece64-81d6-43d8-9b18-7fc8aff7b06b\\\"\",\r\n \ \ \"type\": \"Microsoft.Network/virtualNetworks\",\r\n \"location\": \"westus\"\ ,\r\n \"tags\": {},\r\n \"properties\": {\r\n \"provisioningState\":\ - \ \"Updating\",\r\n \"resourceGuid\": \"7d82c69e-97c9-4b3a-a990-9c56412f1b85\"\ + \ \"Updating\",\r\n \"resourceGuid\": \"16adc12b-15c9-4456-9483-71ae34e5883e\"\ ,\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\": \"subnet1\"\ ,\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1\"\ - ,\r\n \"etag\": \"W/\\\"5d72da09-4ebd-475b-8531-2ee87d015f8e\\\"\"\ + ,\r\n \"etag\": \"W/\\\"7caece64-81d6-43d8-9b18-7fc8aff7b06b\\\"\"\ ,\r\n \"properties\": {\r\n \"provisioningState\": \"Updating\"\ ,\r\n \"addressPrefix\": \"10.0.0.0/24\"\r\n }\r\n }\r\ \n ],\r\n \"virtualNetworkPeerings\": [],\r\n \"enableDdosProtection\"\ : false,\r\n \"enableVmProtection\": false\r\n }\r\n}"} headers: - azure-asyncoperation: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/9cc37ec6-0395-43a5-be35-9d10956b20f3?api-version=2018-02-01'] + azure-asyncoperation: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/7dbb1e4a-e2e2-41ec-b99f-495eb60f654f?api-version=2018-02-01'] cache-control: [no-cache] content-length: ['1230'] content-type: [application/json; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:20:11 GMT'] + date: ['Tue, 01 May 2018 21:50:51 GMT'] expires: ['-1'] pragma: [no-cache] server: [Microsoft-HTTPAPI/2.0, Microsoft-HTTPAPI/2.0] @@ -384,18 +384,18 @@ interactions: Accept-Encoding: ['gzip, deflate'] CommandName: [network vnet create] Connection: [keep-alive] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 networkmanagementclient/2.0.0rc2 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/9cc37ec6-0395-43a5-be35-9d10956b20f3?api-version=2018-02-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/7dbb1e4a-e2e2-41ec-b99f-495eb60f654f?api-version=2018-02-01 response: body: {string: "{\r\n \"status\": \"InProgress\"\r\n}"} headers: cache-control: [no-cache] content-length: ['30'] content-type: [application/json; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:20:15 GMT'] + date: ['Tue, 01 May 2018 21:50:54 GMT'] expires: ['-1'] pragma: [no-cache] server: [Microsoft-HTTPAPI/2.0, Microsoft-HTTPAPI/2.0] @@ -411,18 +411,18 @@ interactions: Accept-Encoding: ['gzip, deflate'] CommandName: [network vnet create] Connection: [keep-alive] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 networkmanagementclient/2.0.0rc2 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/9cc37ec6-0395-43a5-be35-9d10956b20f3?api-version=2018-02-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/7dbb1e4a-e2e2-41ec-b99f-495eb60f654f?api-version=2018-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: ['Wed, 04 Apr 2018 18:20:25 GMT'] + date: ['Tue, 01 May 2018 21:51:05 GMT'] expires: ['-1'] pragma: [no-cache] server: [Microsoft-HTTPAPI/2.0, Microsoft-HTTPAPI/2.0] @@ -438,22 +438,22 @@ interactions: Accept-Encoding: ['gzip, deflate'] CommandName: [network vnet create] Connection: [keep-alive] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 networkmanagementclient/2.0.0rc2 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1?api-version=2018-02-01 response: body: {string: "{\r\n \"name\": \"vnet1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1\"\ - ,\r\n \"etag\": \"W/\\\"fcbfa7a6-5dd9-4213-9ec6-7fac99135368\\\"\",\r\n \ + ,\r\n \"etag\": \"W/\\\"31985a96-6d04-4122-b48e-9f096715aaa7\\\"\",\r\n \ \ \"type\": \"Microsoft.Network/virtualNetworks\",\r\n \"location\": \"westus\"\ ,\r\n \"tags\": {},\r\n \"properties\": {\r\n \"provisioningState\":\ - \ \"Succeeded\",\r\n \"resourceGuid\": \"7d82c69e-97c9-4b3a-a990-9c56412f1b85\"\ + \ \"Succeeded\",\r\n \"resourceGuid\": \"16adc12b-15c9-4456-9483-71ae34e5883e\"\ ,\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\": \"subnet1\"\ ,\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1\"\ - ,\r\n \"etag\": \"W/\\\"fcbfa7a6-5dd9-4213-9ec6-7fac99135368\\\"\"\ + ,\r\n \"etag\": \"W/\\\"31985a96-6d04-4122-b48e-9f096715aaa7\\\"\"\ ,\r\n \"properties\": {\r\n \"provisioningState\": \"Succeeded\"\ ,\r\n \"addressPrefix\": \"10.0.0.0/24\"\r\n }\r\n }\r\ \n ],\r\n \"virtualNetworkPeerings\": [],\r\n \"enableDdosProtection\"\ @@ -462,8 +462,8 @@ interactions: cache-control: [no-cache] content-length: ['1232'] content-type: [application/json; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:20:26 GMT'] - etag: [W/"fcbfa7a6-5dd9-4213-9ec6-7fac99135368"] + date: ['Tue, 01 May 2018 21:51:05 GMT'] + etag: [W/"31985a96-6d04-4122-b48e-9f096715aaa7"] expires: ['-1'] pragma: [no-cache] server: [Microsoft-HTTPAPI/2.0, Microsoft-HTTPAPI/2.0] @@ -480,23 +480,23 @@ interactions: CommandName: [network vnet subnet update] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 networkmanagementclient/2.0.0rc2 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1?api-version=2018-02-01 response: body: {string: "{\r\n \"name\": \"subnet1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1\"\ - ,\r\n \"etag\": \"W/\\\"fcbfa7a6-5dd9-4213-9ec6-7fac99135368\\\"\",\r\n \ + ,\r\n \"etag\": \"W/\\\"31985a96-6d04-4122-b48e-9f096715aaa7\\\"\",\r\n \ \ \"properties\": {\r\n \"provisioningState\": \"Succeeded\",\r\n \"\ addressPrefix\": \"10.0.0.0/24\"\r\n }\r\n}"} headers: cache-control: [no-cache] content-length: ['403'] content-type: [application/json; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:20:26 GMT'] - etag: [W/"fcbfa7a6-5dd9-4213-9ec6-7fac99135368"] + date: ['Tue, 01 May 2018 21:51:06 GMT'] + etag: [W/"31985a96-6d04-4122-b48e-9f096715aaa7"] expires: ['-1'] pragma: [no-cache] server: [Microsoft-HTTPAPI/2.0, Microsoft-HTTPAPI/2.0] @@ -509,7 +509,7 @@ interactions: body: 'b''{"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1", "properties": {"addressPrefix": "10.0.0.0/24", "serviceEndpoints": [{"service": "Microsoft.Storage"}], "provisioningState": "Succeeded"}, "name": "subnet1", - "etag": "W/\\"fcbfa7a6-5dd9-4213-9ec6-7fac99135368\\""}''' + "etag": "W/\\"31985a96-6d04-4122-b48e-9f096715aaa7\\""}''' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] @@ -517,26 +517,26 @@ interactions: Connection: [keep-alive] Content-Length: ['429'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 networkmanagementclient/2.0.0rc2 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1?api-version=2018-02-01 response: body: {string: "{\r\n \"name\": \"subnet1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1\"\ - ,\r\n \"etag\": \"W/\\\"1d5c59cf-a1a9-4e4c-9fb9-45b13c1638ea\\\"\",\r\n \ + ,\r\n \"etag\": \"W/\\\"a69be374-b963-45f6-ab1d-9c9f8176f949\\\"\",\r\n \ \ \"properties\": {\r\n \"provisioningState\": \"Updating\",\r\n \"\ addressPrefix\": \"10.0.0.0/24\",\r\n \"serviceEndpoints\": [\r\n \ \ {\r\n \"provisioningState\": \"Updating\",\r\n \"service\"\ : \"Microsoft.Storage\",\r\n \"locations\": [\r\n \"westus\"\ ,\r\n \"eastus\"\r\n ]\r\n }\r\n ]\r\n }\r\n}"} headers: - azure-asyncoperation: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/a418b8fe-519a-48eb-b336-a1bb9b7209cb?api-version=2018-02-01'] + azure-asyncoperation: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/5f42439d-cc62-4a42-9309-477d67c97ece?api-version=2018-02-01'] cache-control: [no-cache] content-length: ['614'] content-type: [application/json; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:20:27 GMT'] + date: ['Tue, 01 May 2018 21:51:07 GMT'] expires: ['-1'] pragma: [no-cache] server: [Microsoft-HTTPAPI/2.0, Microsoft-HTTPAPI/2.0] @@ -544,7 +544,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1197'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null @@ -553,18 +553,18 @@ interactions: Accept-Encoding: ['gzip, deflate'] CommandName: [network vnet subnet update] Connection: [keep-alive] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 networkmanagementclient/2.0.0rc2 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/a418b8fe-519a-48eb-b336-a1bb9b7209cb?api-version=2018-02-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westus/operations/5f42439d-cc62-4a42-9309-477d67c97ece?api-version=2018-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: ['Wed, 04 Apr 2018 18:20:31 GMT'] + date: ['Tue, 01 May 2018 21:51:10 GMT'] expires: ['-1'] pragma: [no-cache] server: [Microsoft-HTTPAPI/2.0, Microsoft-HTTPAPI/2.0] @@ -580,14 +580,14 @@ interactions: Accept-Encoding: ['gzip, deflate'] CommandName: [network vnet subnet update] Connection: [keep-alive] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 networkmanagementclient/2.0.0rc2 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1?api-version=2018-02-01 response: body: {string: "{\r\n \"name\": \"subnet1\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1\"\ - ,\r\n \"etag\": \"W/\\\"b5052a24-23e5-45b1-b1c1-799fb50ec51f\\\"\",\r\n \ + ,\r\n \"etag\": \"W/\\\"4d7eebd5-7a63-4525-a927-a1b25fb98a40\\\"\",\r\n \ \ \"properties\": {\r\n \"provisioningState\": \"Succeeded\",\r\n \"\ addressPrefix\": \"10.0.0.0/24\",\r\n \"serviceEndpoints\": [\r\n \ \ {\r\n \"provisioningState\": \"Succeeded\",\r\n \"service\"\ @@ -597,8 +597,8 @@ interactions: cache-control: [no-cache] content-length: ['616'] content-type: [application/json; charset=utf-8] - date: ['Wed, 04 Apr 2018 18:20:31 GMT'] - etag: [W/"b5052a24-23e5-45b1-b1c1-799fb50ec51f"] + date: ['Tue, 01 May 2018 21:51:11 GMT'] + etag: [W/"4d7eebd5-7a63-4525-a927-a1b25fb98a40"] expires: ['-1'] pragma: [no-cache] server: [Microsoft-HTTPAPI/2.0, Microsoft-HTTPAPI/2.0] @@ -615,18 +615,18 @@ interactions: CommandName: [storage account network-rule add] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1478'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:32 GMT'] + date: ['Tue, 01 May 2018 21:51:11 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -647,18 +647,18 @@ interactions: Connection: [keep-alive] Content-Length: ['196'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.1.2.3","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.1.2.3","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1515'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:31 GMT'] + date: ['Tue, 01 May 2018 21:51:12 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -677,18 +677,18 @@ interactions: CommandName: [storage account network-rule add] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.1.2.3","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.1.2.3","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1515'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:32 GMT'] + date: ['Tue, 01 May 2018 21:51:12 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -709,18 +709,18 @@ interactions: Connection: [keep-alive] Content-Length: ['241'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1556'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:33 GMT'] + date: ['Tue, 01 May 2018 21:51:12 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -739,18 +739,18 @@ interactions: CommandName: [storage account network-rule add] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1556'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:34 GMT'] + date: ['Tue, 01 May 2018 21:51:13 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -772,18 +772,18 @@ interactions: Connection: [keep-alive] Content-Length: ['478'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1810'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:36 GMT'] + date: ['Tue, 01 May 2018 21:51:15 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -792,7 +792,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-ms-ratelimit-remaining-subscription-writes: ['1192'] status: {code: 200, message: OK} - request: body: null @@ -802,18 +802,18 @@ interactions: CommandName: [storage account network-rule list] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1810'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:35 GMT'] + date: ['Tue, 01 May 2018 21:51:16 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -831,18 +831,18 @@ interactions: CommandName: [storage account network-rule remove] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.1.2.3","action":"Allow"},{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1810'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:36 GMT'] + date: ['Tue, 01 May 2018 21:51:16 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -864,18 +864,18 @@ interactions: Connection: [keep-alive] Content-Length: ['458'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1772'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:39 GMT'] + date: ['Tue, 01 May 2018 21:51:18 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -884,7 +884,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1197'] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null @@ -894,18 +894,18 @@ interactions: CommandName: [storage account network-rule remove] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1","action":"Allow","state":"Succeeded"}],"ipRules":[{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1772'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:39 GMT'] + date: ['Tue, 01 May 2018 21:51:19 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -926,18 +926,18 @@ interactions: Connection: [keep-alive] Content-Length: ['199'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1518'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:41 GMT'] + date: ['Tue, 01 May 2018 21:51:21 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -946,7 +946,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1197'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null @@ -956,18 +956,18 @@ interactions: CommandName: [storage account network-rule list] Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-04T18:19:47.6247946Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-04T18:19:47.5622932Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_storage_service_endpoints000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"Logging","virtualNetworkRules":[],"ipRules":[{"value":"25.2.0.0/24","action":"Allow"}],"defaultAction":"Deny"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:25.3720587Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:24.9657749Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1518'] content-type: [application/json] - date: ['Wed, 04 Apr 2018 18:20:42 GMT'] + date: ['Tue, 01 May 2018 21:51:20 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -986,9 +986,9 @@ interactions: Connection: [keep-alive] Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.1 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.27 + User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_storage_service_endpoints000001?api-version=2017-05-10 @@ -997,12 +997,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Wed, 04 Apr 2018 18:20:42 GMT'] + date: ['Tue, 01 May 2018 21:51:21 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTEk6NUZURVNUOjVGU1RPUkFHRTo1RlNFUlZJQ0U6NUZFTkRQT0lOVFNERFBKRHxERDg2QTZFMTk2MTlCQjhBLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTEk6NUZURVNUOjVGU1RPUkFHRTo1RlNFUlZJQ0U6NUZFTkRQT0lOVFM1NlQ1Rnw5RkIwNUI4RDM3Q0JGQzA0LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1196'] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_append.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_append.yaml index 3dfe04c18d7..cafd625adc2 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_append.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_append.yaml @@ -1,31 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:45:25Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.29] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:45:25Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Fri, 09 Mar 2018 21:24:23 GMT'] + date: ['Tue, 01 May 2018 21:45:27 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -38,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.29] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -48,15 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Fri, 09 Mar 2018 21:24:26 GMT'] + date: ['Tue, 01 May 2018 21:45:27 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/c7130dc0-8742-4df0-b96f-9c735167b847?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/1d74ead7-75d6-478d-bad1-b1e1b3b27c02?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} - request: body: null @@ -67,45 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.29] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/c7130dc0-8742-4df0-b96f-9c735167b847?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/1d74ead7-75d6-478d-bad1-b1e1b3b27c02?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Fri, 09 Mar 2018 21:24:43 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/c7130dc0-8742-4df0-b96f-9c735167b847?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-content-type-options: [nosniff] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.29] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/c7130dc0-8742-4df0-b96f-9c735167b847?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-03-09T21:24:25.9673412Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-03-09T21:24:25.9673412Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-03-09T21:24:25.9517391Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:28.2151132Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:28.2151132Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:28.1369842Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Fri, 09 Mar 2018 21:25:01 GMT'] + date: ['Tue, 01 May 2018 21:45:45 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -125,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.29] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"wEpDeAcuqU8xPj0pKJGM1vQRqB/ldhPmOs/XzewVFIn3lFbKPofz7gNE4aILYdt29eEQ/1mk4TGOsNFpAX9oXQ==","permissions":"FULL"},{"keyName":"key2","value":"Iz3qoDlAi+yDuI7dfeirLiDpqmCfbz9WxvQRpNKFYtyvB7+1gr6sWh5umI73Uag12CdGATMDdrKwz+zQxsALlA==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"OR+prta1aaKGZRHhg8YyrdKAgKgs2Nph57dO78Qs1lMWof4bnJoyXh6m6NN4D3Z93t8NlJjM7HM5wnU/woxOJA==","permissions":"FULL"},{"keyName":"key2","value":"wCuvmxZmKrxy4BAXAsvmP20XSN9gzJbQ+Apju3acibG8qHH05iSYKBdWgsuujA3A89huL5evdQ9NaPh+0icDgg==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Fri, 09 Mar 2018 21:25:02 GMT'] + date: ['Tue, 01 May 2018 21:45:46 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -144,7 +117,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null @@ -156,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.29] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"wEpDeAcuqU8xPj0pKJGM1vQRqB/ldhPmOs/XzewVFIn3lFbKPofz7gNE4aILYdt29eEQ/1mk4TGOsNFpAX9oXQ==","permissions":"FULL"},{"keyName":"key2","value":"Iz3qoDlAi+yDuI7dfeirLiDpqmCfbz9WxvQRpNKFYtyvB7+1gr6sWh5umI73Uag12CdGATMDdrKwz+zQxsALlA==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"OR+prta1aaKGZRHhg8YyrdKAgKgs2Nph57dO78Qs1lMWof4bnJoyXh6m6NN4D3Z93t8NlJjM7HM5wnU/woxOJA==","permissions":"FULL"},{"keyName":"key2","value":"wCuvmxZmKrxy4BAXAsvmP20XSN9gzJbQ+Apju3acibG8qHH05iSYKBdWgsuujA3A89huL5evdQ9NaPh+0icDgg==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Fri, 09 Mar 2018 21:25:03 GMT'] + date: ['Tue, 01 May 2018 21:45:47 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -175,45 +148,47 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1197'] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.29] - x-ms-date: ['Fri, 09 Mar 2018 21:25:03 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:47 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Fri, 09 Mar 2018 21:25:03 GMT'] - etag: ['"0x8D586043929E914"'] - last-modified: ['Fri, 09 Mar 2018 21:25:03 GMT'] + date: ['Tue, 01 May 2018 21:45:47 GMT'] + etag: ['"0x8D5AFACE694E4D5"'] + last-modified: ['Tue, 01 May 2018 21:45:48 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.29] - x-ms-date: ['Fri, 09 Mar 2018 21:25:04 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:48 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: body: {string: ''} headers: - date: ['Fri, 09 Mar 2018 21:25:04 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-error-code: [BlobNotFound] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 404, message: The specified blob does not exist.} - request: body: null @@ -221,22 +196,23 @@ interactions: Connection: [keep-alive] Content-Length: ['0'] If-None-Match: ['*'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.29] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-type: [AppendBlob] - x-ms-date: ['Fri, 09 Mar 2018 21:25:04 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:45:48 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: body: {string: ''} headers: - date: ['Fri, 09 Mar 2018 21:25:04 GMT'] - etag: ['"0x8D58604397B2DAA"'] - last-modified: ['Fri, 09 Mar 2018 21:25:04 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] + etag: ['"0x8D5AFACE6F34F3E"'] + last-modified: ['Tue, 01 May 2018 21:45:48 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ @@ -269,56 +245,60 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['1024'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.29] - x-ms-date: ['Fri, 09 Mar 2018 21:25:04 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:48 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=appendblock response: body: {string: ''} headers: content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] - date: ['Fri, 09 Mar 2018 21:25:15 GMT'] - etag: ['"0x8D586043B54F45F"'] - last-modified: ['Fri, 09 Mar 2018 21:25:07 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] + etag: ['"0x8D5AFACE70BE4D6"'] + last-modified: ['Tue, 01 May 2018 21:45:48 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-blob-append-offset: ['0'] x-ms-blob-committed-block-count: ['1'] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.29] - x-ms-date: ['Fri, 09 Mar 2018 21:25:15 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=list response: body: {string: "\uFEFFblob000004Fri,\ - \ 09 Mar 2018 21:25:07 GMT0x8D586043B54F45F1024application/octet-streamblob000004Tue,\ + \ 01 May 2018 21:45:48 GMTTue, 01 May 2018\ + \ 21:45:48 GMT0x8D5AFACE70BE4D61024application/octet-streamAppendBlobunlockedavailabletrue"} headers: content-type: [application/xml] - date: ['Fri, 09 Mar 2018 21:25:15 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.29] - x-ms-date: ['Fri, 09 Mar 2018 21:25:16 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: @@ -327,35 +307,37 @@ interactions: accept-ranges: [bytes] content-length: ['1024'] content-type: [application/octet-stream] - date: ['Fri, 09 Mar 2018 21:25:15 GMT'] - etag: ['"0x8D586043B54F45F"'] - last-modified: ['Fri, 09 Mar 2018 21:25:07 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] + etag: ['"0x8D5AFACE70BE4D6"'] + last-modified: ['Tue, 01 May 2018 21:45:48 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-committed-block-count: ['1'] x-ms-blob-type: [AppendBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:45:48 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] If-None-Match: ['*'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.29] - x-ms-date: ['Fri, 09 Mar 2018 21:25:16 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: body: {string: ''} headers: - date: ['Fri, 09 Mar 2018 21:25:15 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-error-code: [UnsatisfiableCondition] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 400, message: The request includes an unsatisfiable condition for this operation.} - request: @@ -368,8 +350,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.29] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -378,12 +360,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Fri, 09 Mar 2018 21:25:16 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdINExUUTdQSTRGVlVOT1RKQkxKSk41WVJNV1lOTUtQRUhIVHxBQkVDQjkwMkY4MDgxMjBFLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdHNElBRE5USEpZS1BYUkdVRDVHWEpVNVJGUVpUSEI2VVZRRnxCREYyNzBFMURBMTdCQzU1LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_container_operations.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_container_operations.yaml index 8886f8ddd90..91d3a2cc339 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_container_operations.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_container_operations.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:45:50Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:45:50Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:27:55 GMT'] + date: ['Tue, 01 May 2018 21:45:51 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:27:56 GMT'] + date: ['Tue, 01 May 2018 21:45:51 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/105b3112-2a48-4f45-938b-c6f14b1f4f1b?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/f01be2eb-5354-4e4e-bd41-56dbac4522b9?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1179'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} - request: body: null @@ -65,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/105b3112-2a48-4f45-938b-c6f14b1f4f1b?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/f01be2eb-5354-4e4e-bd41-56dbac4522b9?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:27:56.5462190Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:27:56.5462190Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:27:56.4993728Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:52.3404756Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:52.3404756Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:52.2623291Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:28:13 GMT'] + date: ['Tue, 01 May 2018 21:46:09 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -83,6 +86,7 @@ interactions: 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: null @@ -94,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"/vl3rDqMusKbUOpktCjgYxJZcNezTrC0kMYWlIOzYpzaeg+/woRF1r/TKgKee5NiVEOG2a8KBMLWNHGAiDSzLA==","permissions":"FULL"},{"keyName":"key2","value":"B9VYtuhOeAwP4+fM6R77nXna5PeHhH8lIJrVUu0XlBc+hZGKxZYeiMwP1t1VSQ6JZ0WmjxQjVmBo3E8nB+HvAg==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"tNwbYiizG3C+s/lu9T78/0AhW8nLLgRJG9m1Ap2TnU8J3JOvX41/i2onux/JvyydlmGocEzRz2/qZRrC1Qv+dA==","permissions":"FULL"},{"keyName":"key2","value":"+KZpz6le/ThUHtweZGUzIqkMrZ4uDjXi4lhL96dGjj2KSN5dJ9S29HGjxBLV3NvvdWVs9K2+zSzwoTZhV5seEQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:28:15 GMT'] + date: ['Tue, 01 May 2018 21:46:10 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -112,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -124,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"/vl3rDqMusKbUOpktCjgYxJZcNezTrC0kMYWlIOzYpzaeg+/woRF1r/TKgKee5NiVEOG2a8KBMLWNHGAiDSzLA==","permissions":"FULL"},{"keyName":"key2","value":"B9VYtuhOeAwP4+fM6R77nXna5PeHhH8lIJrVUu0XlBc+hZGKxZYeiMwP1t1VSQ6JZ0WmjxQjVmBo3E8nB+HvAg==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"tNwbYiizG3C+s/lu9T78/0AhW8nLLgRJG9m1Ap2TnU8J3JOvX41/i2onux/JvyydlmGocEzRz2/qZRrC1Qv+dA==","permissions":"FULL"},{"keyName":"key2","value":"+KZpz6le/ThUHtweZGUzIqkMrZ4uDjXi4lhL96dGjj2KSN5dJ9S29HGjxBLV3NvvdWVs9K2+zSzwoTZhV5seEQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:28:16 GMT'] + date: ['Tue, 01 May 2018 21:46:10 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -142,56 +147,62 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1195'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:17 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:11 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:17 GMT'] - etag: ['"0x8D56F2A1AFB6456"'] - last-modified: ['Thu, 08 Feb 2018 19:28:17 GMT'] + date: ['Tue, 01 May 2018 21:46:11 GMT'] + etag: ['"0x8D5AFACF4C9254E"'] + last-modified: ['Tue, 01 May 2018 21:46:11 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:17 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:12 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:16 GMT'] - etag: ['"0x8D56F2A1AFB6456"'] - last-modified: ['Thu, 08 Feb 2018 19:28:17 GMT'] + date: ['Tue, 01 May 2018 21:46:11 GMT'] + etag: ['"0x8D5AFACF4C9254E"'] + last-modified: ['Tue, 01 May 2018 21:46:11 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] + x-ms-has-immutability-policy: ['false'] + x-ms-has-legal-hold: ['false'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:17 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:12 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: @@ -199,12 +210,12 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:28:17 GMT'] - etag: ['"0x8D56F2A1AFB6456"'] - last-modified: ['Thu, 08 Feb 2018 19:28:17 GMT'] + date: ['Tue, 01 May 2018 21:46:12 GMT'] + etag: ['"0x8D5AFACF4C9254E"'] + last-modified: ['Tue, 01 May 2018 21:46:11 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -213,29 +224,31 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['60'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-public-access: [blob] - x-ms-date: ['Thu, 08 Feb 2018 19:28:17 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:46:12 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:17 GMT'] - etag: ['"0x8D56F2A1B7F5F8A"'] - last-modified: ['Thu, 08 Feb 2018 19:28:18 GMT'] + date: ['Tue, 01 May 2018 21:46:12 GMT'] + etag: ['"0x8D5AFACF54CCAB9"'] + last-modified: ['Tue, 01 May 2018 21:46:12 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:18 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:12 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: @@ -243,21 +256,22 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:28:17 GMT'] - etag: ['"0x8D56F2A1B7F5F8A"'] - last-modified: ['Thu, 08 Feb 2018 19:28:18 GMT'] + date: ['Tue, 01 May 2018 21:46:12 GMT'] + etag: ['"0x8D5AFACF54CCAB9"'] + last-modified: ['Tue, 01 May 2018 21:46:12 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-blob-public-access: [blob] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:18 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:13 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: @@ -265,13 +279,13 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:28:18 GMT'] - etag: ['"0x8D56F2A1B7F5F8A"'] - last-modified: ['Thu, 08 Feb 2018 19:28:18 GMT'] + date: ['Tue, 01 May 2018 21:46:13 GMT'] + etag: ['"0x8D5AFACF54CCAB9"'] + last-modified: ['Tue, 01 May 2018 21:46:12 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-blob-public-access: [blob] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -280,28 +294,30 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['60'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:18 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:13 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:18 GMT'] - etag: ['"0x8D56F2A1BF24F99"'] - last-modified: ['Thu, 08 Feb 2018 19:28:19 GMT'] + date: ['Tue, 01 May 2018 21:46:13 GMT'] + etag: ['"0x8D5AFACF5CFD675"'] + last-modified: ['Tue, 01 May 2018 21:46:13 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:18 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:13 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: @@ -309,136 +325,144 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:28:18 GMT'] - etag: ['"0x8D56F2A1BF24F99"'] - last-modified: ['Thu, 08 Feb 2018 19:28:19 GMT'] + date: ['Tue, 01 May 2018 21:46:13 GMT'] + etag: ['"0x8D5AFACF5CFD675"'] + last-modified: ['Tue, 01 May 2018 21:46:13 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:19 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:14 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:18 GMT'] - etag: ['"0x8D56F2A1BF24F99"'] - last-modified: ['Thu, 08 Feb 2018 19:28:19 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF5CFD675"'] + last-modified: ['Tue, 01 May 2018 21:46:13 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] + x-ms-has-immutability-policy: ['false'] + x-ms-has-legal-hold: ['false'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:19 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:14 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?comp=list response: body: {string: "\uFEFFcont000003Thu,\ - \ 08 Feb 2018 19:28:19 GMT\"0x8D56F2A1BF24F99\"unlockedavailablecont000003Tue,\ + \ 01 May 2018 21:46:13 GMT\"0x8D5AFACF5CFD675\"unlockedavailablefalsefalse"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:28:19 GMT'] + date: ['Tue, 01 May 2018 21:46:13 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:19 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:14 GMT'] x-ms-meta-foo: [bar] x-ms-meta-moo: [bak] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:19 GMT'] - etag: ['"0x8D56F2A1C9B218F"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF699E775"'] + last-modified: ['Tue, 01 May 2018 21:46:14 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:20 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:15 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:19 GMT'] - etag: ['"0x8D56F2A1C9B218F"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF699E775"'] + last-modified: ['Tue, 01 May 2018 21:46:14 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-meta-foo: [bar] x-ms-meta-moo: [bak] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:20 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:15 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:20 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:20 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:15 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:20 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:15 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null @@ -446,241 +470,260 @@ interactions: Connection: [keep-alive] Content-Length: ['0'] If-Modified-Since: ['Fri, 01 Apr 2016 12:00:00 GMT'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:20 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:16 GMT'] x-ms-lease-action: [acquire] x-ms-lease-duration: ['60'] x-ms-proposed-lease-id: [abcdabcd-abcd-abcd-abcd-abcdabcdabcd] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:21 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-lease-id: [abcdabcd-abcd-abcd-abcd-abcdabcdabcd] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:21 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:16 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:20 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] + x-ms-has-immutability-policy: ['false'] + x-ms-has-legal-hold: ['false'] x-ms-lease-duration: [fixed] x-ms-lease-state: [leased] x-ms-lease-status: [locked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:21 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:16 GMT'] x-ms-lease-action: [change] x-ms-lease-id: [abcdabcd-abcd-abcd-abcd-abcdabcdabcd] x-ms-proposed-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:21 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:17 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:21 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:17 GMT'] x-ms-lease-action: [renew] x-ms-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:21 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:22 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:17 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:21 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] + x-ms-has-immutability-policy: ['false'] + x-ms-has-legal-hold: ['false'] x-ms-lease-duration: [fixed] x-ms-lease-state: [leased] x-ms-lease-status: [locked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:22 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:17 GMT'] x-ms-lease-action: [break] x-ms-lease-break-period: ['30'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:21 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:17 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-lease-time: ['30'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:22 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:18 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:22 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:17 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] + x-ms-has-immutability-policy: ['false'] + x-ms-has-legal-hold: ['false'] x-ms-lease-state: [breaking] x-ms-lease-status: [locked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:22 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:18 GMT'] x-ms-lease-action: [release] x-ms-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:22 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:23 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:18 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:23 GMT'] - etag: ['"0x8D56F2A1CF88C0E"'] - last-modified: ['Thu, 08 Feb 2018 19:28:20 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] + etag: ['"0x8D5AFACF7003C44"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] + x-ms-has-immutability-policy: ['false'] + x-ms-has-legal-hold: ['false'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:23 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:19 GMT'] + x-ms-version: ['2017-11-09'] method: DELETE uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:28:23 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:28:23 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:19 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: "\uFEFFContainerNotFoundThe\ - \ specified container does not exist.\nRequestId:f7082c34-001e-011b-4612-a1c00c000000\n\ - Time:2018-02-08T19:28:24.2397015Z"} + \ specified container does not exist.\nRequestId:5c2b7908-701e-00c3-3695-e16d4b000000\n\ + Time:2018-05-01T21:46:19.8336002Z"} headers: content-length: ['225'] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:28:23 GMT'] + date: ['Tue, 01 May 2018 21:46:19 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-error-code: [ContainerNotFound] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 404, message: The specified container does not exist.} - request: body: null @@ -692,8 +735,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -702,11 +745,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 19:28:25 GMT'] + date: ['Tue, 01 May 2018 21:46:19 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdRT0pVVjNCWEFQQ1hCVFUyUTM1NklFNkpQUjZNRTY0UzVYMnwzOUJBNTVEQjAzREYxNEI4LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdDT0JHNDZEQ1lUQUNPN0xIUjVNU05INUJZVDVIVVo0TVlFTXw3RjQwRkM0MjMzMkFEMTZFLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_incremental_copy.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_incremental_copy.yaml index 1f37f37ef73..4b0663e1833 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_incremental_copy.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_incremental_copy.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: !!python/unicode '{"location": "westus", "tags": {"use": "az-test"}}' + body: !!python/unicode '{"location": "westus", "tags": {"date": "2018-05-02T19:43:58Z", + "product": "azurecli", "cause": "automation"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: !!python/unicode '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: !!python/unicode '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"date":"2018-05-02T19:43:58Z","product":"azurecli","cause":"automation"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 23:20:42 GMT'] + date: ['Wed, 02 May 2018 19:44:00 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1195'] status: {code: 201, message: Created} - request: body: !!python/unicode '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 23:20:44 GMT'] + date: ['Wed, 02 May 2018 19:44:02 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/9fbedf8b-29f6-45f5-aef6-fd2df092382a?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/8c8b53d2-a910-435a-b60d-0b2544b5660a?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1195'] status: {code: 202, message: Accepted} - request: body: null @@ -65,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/9fbedf8b-29f6-45f5-aef6-fd2df092382a?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/8c8b53d2-a910-435a-b60d-0b2544b5660a?monitor=true&api-version=2017-10-01 response: - body: {string: !!python/unicode '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T23:20:44.9190016Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T23:20:44.9190016Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T23:20:44.8720832Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: !!python/unicode '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-02T19:44:02.2748953Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-02T19:44:02.2748953Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-02T19:44:02.1967762Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 23:21:01 GMT'] + date: ['Wed, 02 May 2018 19:44:19 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -83,6 +86,7 @@ interactions: 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: null @@ -94,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: !!python/unicode '{"keys":[{"keyName":"key1","value":"JuXvx0QEEaaBll22+oe0inVihHiW5hncEvtYdETzq+XQIvNyA9yuLhqoYtj0GgjZJqJ4v0Pax16sOIVXbKPXvQ==","permissions":"FULL"},{"keyName":"key2","value":"tYL4AWvj2wAG/i2Sc7LneS6hFZWjLEmGmpNmGQxpZWPimfcZIfuQ8IGQWPypD2BKgvPSo2ULfondTELG5szyHA==","permissions":"FULL"}]}'} + body: {string: !!python/unicode '{"keys":[{"keyName":"key1","value":"iSfpGgcvmAbaFtFdDnqIH/nRi3FlqID5Wd8ax8tU6Gue8ABZR/XzDgshrU1tDIN1TyrFUCCojRtSqPeQ0ERRjA==","permissions":"FULL"},{"keyName":"key2","value":"cWZxyLZpSwQ4DZ3xiqmqiYz7a4IirTs2HPdD5o2pIcnUwehOxk216iFFsicoQxSkNwBEZE4J3ry11uy5ImTlZg==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 23:21:03 GMT'] + date: ['Wed, 02 May 2018 19:44:20 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -112,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1196'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1192'] status: {code: 200, message: OK} - request: body: !!python/unicode '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": @@ -125,7 +130,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003?api-version=2017-10-01 @@ -135,14 +140,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 23:21:05 GMT'] + date: ['Wed, 02 May 2018 19:44:22 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/7d756e20-2d7a-40aa-9a1f-b2d84de0965f?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/435892af-a98b-4a72-8888-0a351e667294?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1192'] status: {code: 202, message: Accepted} - request: body: null @@ -153,17 +159,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/7d756e20-2d7a-40aa-9a1f-b2d84de0965f?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/435892af-a98b-4a72-8888-0a351e667294?monitor=true&api-version=2017-10-01 response: - body: {string: !!python/unicode '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003","name":"clitest000003","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T23:21:05.7095326Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T23:21:05.7095326Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T23:21:05.6620484Z","primaryEndpoints":{"blob":"https://clitest000003.blob.core.windows.net/","queue":"https://clitest000003.queue.core.windows.net/","table":"https://clitest000003.table.core.windows.net/","file":"https://clitest000003.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: !!python/unicode '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003","name":"clitest000003","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-02T19:44:22.3795443Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-02T19:44:22.3795443Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-02T19:44:22.1919822Z","primaryEndpoints":{"blob":"https://clitest000003.blob.core.windows.net/","queue":"https://clitest000003.queue.core.windows.net/","table":"https://clitest000003.table.core.windows.net/","file":"https://clitest000003.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 23:21:22 GMT'] + date: ['Wed, 02 May 2018 19:44:39 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -171,6 +177,7 @@ interactions: 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: null @@ -182,17 +189,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003/listKeys?api-version=2017-10-01 response: - body: {string: !!python/unicode '{"keys":[{"keyName":"key1","value":"zF1d4ftumF5bxsApZkg41yOnKKINCivrVPP7564IMIOSfQ1AIq+kuJVJqjA+EoFxfLKVP7u2IyVXhAB/VkUqsw==","permissions":"FULL"},{"keyName":"key2","value":"ZeabPhhyrA41/DYbjhPL1obhmamA/Xkx0grOUAKsKaW+HZPcHRVh718BqCll/zFdBnOjlp59QvjH0wluSuEQ5w==","permissions":"FULL"}]}'} + body: {string: !!python/unicode '{"keys":[{"keyName":"key1","value":"BbTbkKSkBtL4LovzPMZd4F7X9iwXL4+WAColh/j94Bf1IWXAPmgbvmATih3hqhkAy7sEb/Oq3xvJMNNp95SCnA==","permissions":"FULL"},{"keyName":"key2","value":"R/miHYtsnRkKsoE34tblzJ+OCPb6YKB/EaJk+f4nKwe1PLTceyKx0WBC8onWzTEbKG9cKOQP8zvxIu3z1YJmzQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 23:21:24 GMT'] + date: ['Wed, 02 May 2018 19:44:40 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -200,7 +207,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1193'] status: {code: 200, message: OK} - request: body: null @@ -212,17 +220,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: !!python/unicode '{"keys":[{"keyName":"key1","value":"JuXvx0QEEaaBll22+oe0inVihHiW5hncEvtYdETzq+XQIvNyA9yuLhqoYtj0GgjZJqJ4v0Pax16sOIVXbKPXvQ==","permissions":"FULL"},{"keyName":"key2","value":"tYL4AWvj2wAG/i2Sc7LneS6hFZWjLEmGmpNmGQxpZWPimfcZIfuQ8IGQWPypD2BKgvPSo2ULfondTELG5szyHA==","permissions":"FULL"}]}'} + body: {string: !!python/unicode '{"keys":[{"keyName":"key1","value":"iSfpGgcvmAbaFtFdDnqIH/nRi3FlqID5Wd8ax8tU6Gue8ABZR/XzDgshrU1tDIN1TyrFUCCojRtSqPeQ0ERRjA==","permissions":"FULL"},{"keyName":"key2","value":"cWZxyLZpSwQ4DZ3xiqmqiYz7a4IirTs2HPdD5o2pIcnUwehOxk216iFFsicoQxSkNwBEZE4J3ry11uy5ImTlZg==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 23:21:25 GMT'] + date: ['Wed, 02 May 2018 19:44:41 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -230,50 +238,53 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1194'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 2.7.13; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 23:21:26 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 2.7.13; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 19:44:42 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004?restype=container response: body: {string: !!python/unicode ''} headers: - date: ['Thu, 08 Feb 2018 23:21:26 GMT'] - etag: ['"0x8D56F4AAD24AC5A"'] - last-modified: ['Thu, 08 Feb 2018 23:21:26 GMT'] + date: ['Wed, 02 May 2018 19:44:41 GMT'] + etag: ['"0x8D5B06526655E80"'] + last-modified: ['Wed, 02 May 2018 19:44:42 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 2.7.13; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 2.7.13; Windows + 10) AZURECLI/2.0.32] x-ms-blob-content-length: ['16384'] x-ms-blob-type: [PageBlob] - x-ms-date: ['Thu, 08 Feb 2018 23:21:26 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Wed, 02 May 2018 19:44:42 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004/src response: body: {string: !!python/unicode ''} headers: - date: ['Thu, 08 Feb 2018 23:21:26 GMT'] - etag: ['"0x8D56F4AAD693EED"'] - last-modified: ['Thu, 08 Feb 2018 23:21:27 GMT'] + date: ['Wed, 02 May 2018 19:44:42 GMT'] + etag: ['"0x8D5B06526AC4FA7"'] + last-modified: ['Wed, 02 May 2018 19:44:42 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: !!python/unicode "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ @@ -711,46 +722,48 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['16384'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 2.7.13; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 23:21:26 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 2.7.13; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 19:44:43 GMT'] x-ms-page-write: [update] x-ms-range: [bytes=0-16383] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004/src?comp=page response: body: {string: !!python/unicode ''} headers: content-md5: [zjOP5omXeKrPwoQU8tlJiw==] - date: ['Thu, 08 Feb 2018 23:21:26 GMT'] - etag: ['"0x8D56F4AAD7B6BB5"'] - last-modified: ['Thu, 08 Feb 2018 23:21:27 GMT'] + date: ['Wed, 02 May 2018 19:44:42 GMT'] + etag: ['"0x8D5B06526BC7F53"'] + last-modified: ['Wed, 02 May 2018 19:44:43 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-blob-sequence-number: ['0'] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 2.7.13; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 23:21:27 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 2.7.13; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 19:44:43 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004/src?comp=snapshot response: body: {string: !!python/unicode ''} headers: - date: ['Thu, 08 Feb 2018 23:21:27 GMT'] - etag: ['"0x8D56F4AAD7B6BB5"'] - last-modified: ['Thu, 08 Feb 2018 23:21:27 GMT'] + date: ['Wed, 02 May 2018 19:44:42 GMT'] + etag: ['"0x8D5B06526BC7F53"'] + last-modified: ['Wed, 02 May 2018 19:44:43 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-snapshot: ['2018-02-08T23:21:27.5176463Z'] - x-ms-version: ['2017-07-29'] + x-ms-snapshot: ['2018-05-02T19:44:43.5039308Z'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null @@ -762,17 +775,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000003/listKeys?api-version=2017-10-01 response: - body: {string: !!python/unicode '{"keys":[{"keyName":"key1","value":"zF1d4ftumF5bxsApZkg41yOnKKINCivrVPP7564IMIOSfQ1AIq+kuJVJqjA+EoFxfLKVP7u2IyVXhAB/VkUqsw==","permissions":"FULL"},{"keyName":"key2","value":"ZeabPhhyrA41/DYbjhPL1obhmamA/Xkx0grOUAKsKaW+HZPcHRVh718BqCll/zFdBnOjlp59QvjH0wluSuEQ5w==","permissions":"FULL"}]}'} + body: {string: !!python/unicode '{"keys":[{"keyName":"key1","value":"BbTbkKSkBtL4LovzPMZd4F7X9iwXL4+WAColh/j94Bf1IWXAPmgbvmATih3hqhkAy7sEb/Oq3xvJMNNp95SCnA==","permissions":"FULL"},{"keyName":"key2","value":"R/miHYtsnRkKsoE34tblzJ+OCPb6YKB/EaJk+f4nKwe1PLTceyKx0WBC8onWzTEbKG9cKOQP8zvxIu3z1YJmzQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 23:21:28 GMT'] + date: ['Wed, 02 May 2018 19:44:43 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -780,50 +793,53 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1195'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 2.7.13; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 23:21:28 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 2.7.13; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Wed, 02 May 2018 19:44:44 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000003.blob.core.windows.net/cont000005?restype=container response: body: {string: !!python/unicode ''} headers: - date: ['Thu, 08 Feb 2018 23:21:28 GMT'] - etag: ['"0x8D56F4AAE5990C9"'] - last-modified: ['Thu, 08 Feb 2018 23:21:28 GMT'] + date: ['Wed, 02 May 2018 19:44:43 GMT'] + etag: ['"0x8D5B0652781BC35"'] + last-modified: ['Wed, 02 May 2018 19:44:44 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 2.7.13; Windows 10) AZURECLI/2.0.27] - x-ms-copy-source: ['https://clitestbi3jx6nbygi3a5yo6.blob.core.windows.net/contmdanozytk5cue3v4ki2d/src?sr=b&spr=https&sp=r&sv=2017-07-29&sig=R38Ehi6HoCDJbkYZyOP8kUL%2Byu6yLOfOg2VJuX1uzXU%3D&se=2018-02-09T23%3A21%3A28Z&snapshot=2018-02-08T23:21:27.5176463Z'] - x-ms-date: ['Thu, 08 Feb 2018 23:21:28 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 2.7.13; Windows + 10) AZURECLI/2.0.32] + x-ms-copy-source: ['https://clitestcnlkcrkpqx7wradry.blob.core.windows.net/cont4dqskpfdpndkgy5iw6fd/src?sr=b&spr=https&sp=r&sv=2017-11-09&sig=5mmvYLaxdFL5z12ATWgHzBlFlJnC9Qpqa/lMUPb%2B4NI%3D&se=2018-05-03T19%3A44%3A44Z&snapshot=2018-05-02T19:44:43.5039308Z'] + x-ms-date: ['Wed, 02 May 2018 19:44:44 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000003.blob.core.windows.net/cont000005/backup?comp=incrementalcopy response: body: {string: !!python/unicode ''} headers: - date: ['Thu, 08 Feb 2018 23:21:28 GMT'] - etag: ['"0x8D56F4AAEB098D4"'] - last-modified: ['Thu, 08 Feb 2018 23:21:29 GMT'] + date: ['Wed, 02 May 2018 19:44:44 GMT'] + etag: ['"0x8D5B06527BA7155"'] + last-modified: ['Wed, 02 May 2018 19:44:44 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-copy-id: [4aa9c065-ecb3-4532-9ba1-bb5ec37c6251] + x-ms-copy-id: [0193b26a-a085-4797-95bf-f03b9605f8c7] x-ms-copy-status: [pending] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} - request: body: null @@ -835,8 +851,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/2.7.13 (Windows-10-10.0.16299) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -845,11 +861,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 23:21:30 GMT'] + date: ['Wed, 02 May 2018 19:44:45 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkc2NFg1QUNMNTRVSkVCSUpUNFdVQllWRkEyQ0hHNE5CWk9FQXwxNDFBNzBEMTYyRTEwNEIzLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdCUFJMSkU3VEVLUjZZTFZYQ0w0S05QNEQ0NlFHWlE1NUpIQnwyQURDQjYwM0MxMUM4REU2LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1195'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_lease_operations.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_lease_operations.yaml index dd175cb4827..d0626fb797c 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_lease_operations.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_lease_operations.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:47:04Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:47:04Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:39:29 GMT'] + date: ['Tue, 01 May 2018 21:47:04 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:39:31 GMT'] + date: ['Tue, 01 May 2018 21:47:06 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/043b4021-7381-4720-a9a7-9e8e1421ea16?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/cbfde942-a7fb-421f-983d-6a16db124841?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1179'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/043b4021-7381-4720-a9a7-9e8e1421ea16?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/cbfde942-a7fb-421f-983d-6a16db124841?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:39:48 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/043b4021-7381-4720-a9a7-9e8e1421ea16?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/043b4021-7381-4720-a9a7-9e8e1421ea16?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:39:31.0044104Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:39:31.0044104Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:39:30.9106510Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:06.3725603Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:06.3725603Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:47:06.2788294Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:40:05 GMT'] + date: ['Tue, 01 May 2018 21:47:23 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"niTXyxI/+JfgaExQkTsfhNwkdH/4rQn/cPjT81lQt4elnnZPpm630VkZATpCDGkdyewzPJZ3G0MwMg+n2ClhZw==","permissions":"FULL"},{"keyName":"key2","value":"qx7dotSrrBPrSWBPXwNt7hcXRb+ewbeOIJoeTuWyfrYu3nYKAWHsoOElMkL0R/hvX8g1OnoknS3WW+DdnXZP0g==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"a2oR83Z/uzGUCw1MP02lNmSbg9cX8GsgbMxkK3wZhuOrAeAQ8x/tgv7OBBV0Q0OrN5pOH45NG9MWk80NWijE0Q==","permissions":"FULL"},{"keyName":"key2","value":"cuZ45EUzKnpz59rlFdZD8hnSNfWwGASMcR+O8wdCSz/PHQPUXaMQIQ22jN6v/9CJuJRuVwgaaB/urSq9V8LMNw==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:40:05 GMT'] + date: ['Tue, 01 May 2018 21:47:24 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1195'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: null @@ -151,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"niTXyxI/+JfgaExQkTsfhNwkdH/4rQn/cPjT81lQt4elnnZPpm630VkZATpCDGkdyewzPJZ3G0MwMg+n2ClhZw==","permissions":"FULL"},{"keyName":"key2","value":"qx7dotSrrBPrSWBPXwNt7hcXRb+ewbeOIJoeTuWyfrYu3nYKAWHsoOElMkL0R/hvX8g1OnoknS3WW+DdnXZP0g==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"a2oR83Z/uzGUCw1MP02lNmSbg9cX8GsgbMxkK3wZhuOrAeAQ8x/tgv7OBBV0Q0OrN5pOH45NG9MWk80NWijE0Q==","permissions":"FULL"},{"keyName":"key2","value":"cuZ45EUzKnpz59rlFdZD8hnSNfWwGASMcR+O8wdCSz/PHQPUXaMQIQ22jN6v/9CJuJRuVwgaaB/urSq9V8LMNw==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:40:07 GMT'] + date: ['Tue, 01 May 2018 21:47:24 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -169,27 +147,29 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1181'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:07 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:26 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:40:07 GMT'] - etag: ['"0x8D56F2BC26AC82D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:07 GMT'] + date: ['Tue, 01 May 2018 21:47:26 GMT'] + etag: ['"0x8D5AFAD2133C5EB"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ @@ -3645,23 +3625,24 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['131072'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-type: [BlockBlob] - x-ms-date: ['Thu, 08 Feb 2018 19:40:08 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:47:26 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: body: {string: ''} headers: content-md5: [DfvoqkwgtS4bi/PLbL3xkw==] - date: ['Thu, 08 Feb 2018 19:40:07 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:26 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null @@ -3669,32 +3650,34 @@ interactions: Connection: [keep-alive] Content-Length: ['0'] If-Modified-Since: ['Fri, 01 Apr 2016 12:00:00 GMT'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:08 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:27 GMT'] x-ms-lease-action: [acquire] x-ms-lease-duration: ['60'] x-ms-proposed-lease-id: [abcdabcd-abcd-abcd-abcd-abcdabcdabcd] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:40:08 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:26 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-lease-id: [abcdabcd-abcd-abcd-abcd-abcdabcdabcd] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:08 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:27 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: @@ -3704,71 +3687,75 @@ interactions: content-length: ['131072'] content-md5: [DfvoqkwgtS4bi/PLbL3xkw==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:40:08 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:27 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:47:26 GMT'] x-ms-lease-duration: [fixed] x-ms-lease-state: [leased] x-ms-lease-status: [locked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:09 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:27 GMT'] x-ms-lease-action: [change] x-ms-lease-id: [abcdabcd-abcd-abcd-abcd-abcdabcdabcd] x-ms-proposed-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:40:09 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:27 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:09 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:28 GMT'] x-ms-lease-action: [renew] x-ms-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:40:09 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:28 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:09 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:28 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: @@ -3778,47 +3765,50 @@ interactions: content-length: ['131072'] content-md5: [DfvoqkwgtS4bi/PLbL3xkw==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:40:09 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:28 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:47:26 GMT'] x-ms-lease-duration: [fixed] x-ms-lease-state: [leased] x-ms-lease-status: [locked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:10 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:29 GMT'] x-ms-lease-action: [break] x-ms-lease-break-period: ['30'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:40:09 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:28 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-lease-time: ['30'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:10 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:29 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: @@ -3828,45 +3818,48 @@ interactions: content-length: ['131072'] content-md5: [DfvoqkwgtS4bi/PLbL3xkw==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:40:10 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:29 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:47:26 GMT'] x-ms-lease-state: [breaking] x-ms-lease-status: [locked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:10 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:29 GMT'] x-ms-lease-action: [release] x-ms-lease-id: [dcbadcba-dcba-dcba-dcba-dcbadcbadcba] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=lease response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:40:10 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:29 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:40:10 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:30 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: @@ -3876,15 +3869,16 @@ interactions: content-length: ['131072'] content-md5: [DfvoqkwgtS4bi/PLbL3xkw==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:40:10 GMT'] - etag: ['"0x8D56F2BC2E31F5D"'] - last-modified: ['Thu, 08 Feb 2018 19:40:08 GMT'] + date: ['Tue, 01 May 2018 21:47:30 GMT'] + etag: ['"0x8D5AFAD217D442A"'] + last-modified: ['Tue, 01 May 2018 21:47:26 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:47:26 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null @@ -3896,8 +3890,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -3906,11 +3900,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 19:40:11 GMT'] + date: ['Tue, 01 May 2018 21:47:30 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkc0RFBTVllNUUdDT0tESkpHWlVSUTRQQ0xYVVo2WDZSVVVGR3w1MkQzMEVDMTAwOEZEMUM2LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdHNUhINUNaQ1RXVkpZSVJLN1FLS1BMRUpJQ1hGU0VTUlhDWXw3MDdCNzVBMTgzNkQ4OTMwLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_metadata_operations.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_metadata_operations.yaml index 9d9a266348f..b4946d282be 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_metadata_operations.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_metadata_operations.yaml @@ -1,29 +1,31 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:47:31Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:47:31Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:30:19 GMT'] + date: ['Tue, 01 May 2018 21:47:31 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] + x-content-type-options: [nosniff] x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 201, message: Created} - request: @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:30:20 GMT'] + date: ['Tue, 01 May 2018 21:47:32 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/9bdf8afb-45f2-4eae-8c2e-127d904c823c?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/64395363-7da9-4c6c-bff7-ea6fe1e42ee2?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/9bdf8afb-45f2-4eae-8c2e-127d904c823c?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/64395363-7da9-4c6c-bff7-ea6fe1e42ee2?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:30:38 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/9bdf8afb-45f2-4eae-8c2e-127d904c823c?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/9bdf8afb-45f2-4eae-8c2e-127d904c823c?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:30:21.3217252Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:30:21.3217252Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:30:21.2748558Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:33.1932492Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:33.1932492Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:47:33.1307619Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:30:55 GMT'] + date: ['Tue, 01 May 2018 21:47:50 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"RntPvIdHqnncSsSTTcA9HLXyMw4pXCC/hvRmtvAeVa5/rd5LGzNU8zzkZcZdSEuDW7bklfgqquuIEisaS7rnew==","permissions":"FULL"},{"keyName":"key2","value":"3s1GedWU/+AWOHbj0S1hVZWMlK13GB1erhh3GSF9voUL2LUnt9+dB1v0R/Bscyp62haHhCqEYkjVGMqtvEoGoQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"WPdT48donsWUf4jsRPxmfhBfRjJy+j+RiW6LdYy4XoaFZ6OIV+aMY3jgtZuQ6YZmaI0ZOI8X0KnrGH7CU/JE5A==","permissions":"FULL"},{"keyName":"key2","value":"Rh/W4ble3jsp5UvOUD/d5m39F98+0JQNaopSferYCwfD2Yz66+RYncStEKYVGSg3ri96z/vCgY9xCfV3idefdA==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:30:56 GMT'] + date: ['Tue, 01 May 2018 21:47:51 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1193'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: null @@ -151,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"RntPvIdHqnncSsSTTcA9HLXyMw4pXCC/hvRmtvAeVa5/rd5LGzNU8zzkZcZdSEuDW7bklfgqquuIEisaS7rnew==","permissions":"FULL"},{"keyName":"key2","value":"3s1GedWU/+AWOHbj0S1hVZWMlK13GB1erhh3GSF9voUL2LUnt9+dB1v0R/Bscyp62haHhCqEYkjVGMqtvEoGoQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"WPdT48donsWUf4jsRPxmfhBfRjJy+j+RiW6LdYy4XoaFZ6OIV+aMY3jgtZuQ6YZmaI0ZOI8X0KnrGH7CU/JE5A==","permissions":"FULL"},{"keyName":"key2","value":"Rh/W4ble3jsp5UvOUD/d5m39F98+0JQNaopSferYCwfD2Yz66+RYncStEKYVGSg3ri96z/vCgY9xCfV3idefdA==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:30:57 GMT'] + date: ['Tue, 01 May 2018 21:47:51 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -169,6 +147,7 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] + x-content-type-options: [nosniff] x-ms-ratelimit-remaining-subscription-writes: ['1195'] status: {code: 200, message: OK} - request: @@ -176,20 +155,21 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:30:58 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:52 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:30:58 GMT'] - etag: ['"0x8D56F2A7B3A85DD"'] - last-modified: ['Thu, 08 Feb 2018 19:30:58 GMT'] + date: ['Tue, 01 May 2018 21:47:52 GMT'] + etag: ['"0x8D5AFAD31035F92"'] + last-modified: ['Tue, 01 May 2018 21:47:52 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: "# --------------------------------------------------------------------------------------------\r\ @@ -283,18 +263,41 @@ interactions: \ 'The expected number of block put requests is {} but the actual '\r\ \n 'number is {}.'.format(block_count, len(put_blocks)))\r\ \n\r\n @ResourceGroupPreparer()\r\n @StorageAccountPreparer()\r\n def\ - \ test_storage_blob_lease_operations(self, resource_group, storage_account):\r\ - \n account_info = self.get_account_info(resource_group, storage_account)\r\ - \n local_file = self.create_temp_file(128)\r\n c = self.create_container(account_info)\r\ - \n b = self.create_random_name('blob', 24)\r\n proposed_lease_id\ - \ = 'abcdabcd-abcd-abcd-abcd-abcdabcdabcd'\r\n new_lease_id = 'dcbadcba-dcba-dcba-dcba-dcbadcbadcba'\r\ - \n date = '2016-04-01t12:00z'\r\n\r\n self.storage_cmd('storage\ - \ blob upload -c {} -n {} -f \"{}\"', account_info, c, b, local_file)\r\n\r\n\ - \ # test lease operations\r\n self.storage_cmd('storage blob lease\ - \ acquire --lease-duration 60 -b {} -c {} '\r\n '--if-modified-since\ - \ {} --proposed-lease-id {}', account_info, b, c, date,\r\n \ - \ proposed_lease_id)\r\n self.storage_cmd('storage blob show\ - \ -n {} -c {}', account_info, b, c) \\\r\n .assert_with_checks(JMESPathCheck('properties.lease.duration',\ + \ test_storage_blob_socket_timeout(self, resource_group, storage_account):\r\ + \n local_dir = self.create_temp_dir()\r\n local_file = self.create_temp_file(1)\r\ + \n blob_name = self.create_random_name(prefix='blob', length=24)\r\n\ + \ account_info = self.get_account_info(resource_group, storage_account)\r\ + \n\r\n container = self.create_container(account_info)\r\n\r\n \ + \ from azure.common import AzureException\r\n with self.assertRaises(AzureException):\r\ + \n self.storage_cmd('storage blob upload -c {} -f \"{}\" -n {} --type\ + \ block --socket-timeout -11',\r\n account_info,\ + \ container, local_file, blob_name)\r\n\r\n self.storage_cmd('storage\ + \ blob exists -n {} -c {}', account_info, blob_name, container) \\\r\n \ + \ .assert_with_checks(JMESPathCheck('exists', False))\r\n\r\n self.storage_cmd('storage\ + \ blob upload -c {} -f \"{}\" -n {} --type block --socket-timeout 10',\r\n \ + \ account_info, container, local_file, blob_name)\r\n\ + \ self.storage_cmd('storage blob exists -n {} -c {}', account_info, blob_name,\ + \ container) \\\r\n .assert_with_checks(JMESPathCheck('exists', True))\r\ + \n\r\n self.storage_cmd('storage blob show -n {} -c {}', account_info,\ + \ blob_name, container) \\\r\n .assert_with_checks(JMESPathCheck('name',\ + \ blob_name))\r\n\r\n downloaded = os.path.join(local_dir, 'test.file')\r\ + \n\r\n self.storage_cmd('storage blob download -n {} -c {} --file \"\ + {}\" --socket-timeout 10',\r\n account_info, blob_name,\ + \ container, downloaded)\r\n self.assertTrue(os.path.isfile(downloaded),\ + \ 'The file is not downloaded.')\r\n\r\n @ResourceGroupPreparer()\r\n \ + \ @StorageAccountPreparer()\r\n def test_storage_blob_lease_operations(self,\ + \ resource_group, storage_account):\r\n account_info = self.get_account_info(resource_group,\ + \ storage_account)\r\n local_file = self.create_temp_file(128)\r\n \ + \ c = self.create_container(account_info)\r\n b = self.create_random_name('blob',\ + \ 24)\r\n proposed_lease_id = 'abcdabcd-abcd-abcd-abcd-abcdabcdabcd'\r\ + \n new_lease_id = 'dcbadcba-dcba-dcba-dcba-dcbadcbadcba'\r\n date\ + \ = '2016-04-01t12:00z'\r\n\r\n self.storage_cmd('storage blob upload\ + \ -c {} -n {} -f \"{}\"', account_info, c, b, local_file)\r\n\r\n # test\ + \ lease operations\r\n self.storage_cmd('storage blob lease acquire --lease-duration\ + \ 60 -b {} -c {} '\r\n '--if-modified-since {} --proposed-lease-id\ + \ {}', account_info, b, c, date,\r\n proposed_lease_id)\r\ + \n self.storage_cmd('storage blob show -n {} -c {}', account_info, b,\ + \ c) \\\r\n .assert_with_checks(JMESPathCheck('properties.lease.duration',\ \ 'fixed'),\r\n JMESPathCheck('properties.lease.state',\ \ 'leased'),\r\n JMESPathCheck('properties.lease.status',\ \ 'locked'))\r\n self.storage_cmd('storage blob lease change -b {} -c\ @@ -398,20 +401,20 @@ interactions: \ account_info, c) \\\r\n .assert_with_checks(JMESPathCheck('deleted',\ \ True))\r\n self.storage_cmd('storage container exists -n {}', account_info,\ \ c) \\\r\n .assert_with_checks(JMESPathCheck('exists', False))\r\ - \n\r\n @api_version_constraint(ResourceType.MGMT_STORAGE, min_api='2017-07-29')\r\ - \n @ResourceGroupPreparer()\r\n @StorageAccountPreparer()\r\n def test_storage_blob_soft_delete(self,\ - \ resource_group, storage_account):\r\n account_info = self.get_account_info(resource_group,\ - \ storage_account)\r\n container = self.create_container(account_info)\r\ - \n\r\n # create a blob\r\n local_file = self.create_temp_file(1)\r\ - \n blob_name = self.create_random_name(prefix='blob', length=24)\r\n\r\ - \n self.storage_cmd('storage blob upload -c {} -f \"{}\" -n {} --type\ - \ block', account_info,\r\n container, local_file, blob_name)\r\ - \n self.assertEqual(len(self.storage_cmd('storage blob list -c {}',\r\ - \n account_info, container).get_output_in_json()),\ - \ 1)\r\n\r\n # set delete-policy to enable soft-delete\r\n self.storage_cmd('storage\ - \ blob service-properties delete-policy update --enable true --days-retained\ - \ 2',\r\n account_info)\r\n self.storage_cmd('storage\ - \ blob service-properties delete-policy show',\r\n account_info).assert_with_checks(JMESPathCheck('enabled',\ + \n\r\n @ResourceGroupPreparer()\r\n @StorageAccountPreparer()\r\n def\ + \ test_storage_blob_soft_delete(self, resource_group, storage_account):\r\n\ + \ account_info = self.get_account_info(resource_group, storage_account)\r\ + \n container = self.create_container(account_info)\r\n\r\n # create\ + \ a blob\r\n local_file = self.create_temp_file(1)\r\n blob_name\ + \ = self.create_random_name(prefix='blob', length=24)\r\n\r\n self.storage_cmd('storage\ + \ blob upload -c {} -f \"{}\" -n {} --type block', account_info,\r\n \ + \ container, local_file, blob_name)\r\n self.assertEqual(len(self.storage_cmd('storage\ + \ blob list -c {}',\r\n account_info,\ + \ container).get_output_in_json()), 1)\r\n\r\n # set delete-policy to\ + \ enable soft-delete\r\n self.storage_cmd('storage blob service-properties\ + \ delete-policy update --enable true --days-retained 2',\r\n \ + \ account_info)\r\n self.storage_cmd('storage blob service-properties\ + \ delete-policy show',\r\n account_info).assert_with_checks(JMESPathCheck('enabled',\ \ True),\r\n JMESPathCheck('days',\ \ 2))\r\n\r\n # soft-delete and check\r\n self.storage_cmd('storage\ \ blob delete -c {} -n {}', account_info, container, blob_name)\r\n self.assertEqual(len(self.storage_cmd('storage\ @@ -422,113 +425,132 @@ interactions: \ and check\r\n self.storage_cmd('storage blob undelete -c {} -n {}',\ \ account_info, container, blob_name)\r\n self.assertEqual(len(self.storage_cmd('storage\ \ blob list -c {}',\r\n account_info,\ - \ container).get_output_in_json()), 1)\r\n\r\n\r\nif __name__ == '__main__':\r\ - \n unittest.main()\r\n" + \ container).get_output_in_json()), 1)\r\n\r\n @ResourceGroupPreparer()\r\ + \n @StorageAccountPreparer()\r\n def test_storage_blob_append(self, resource_group,\ + \ storage_account):\r\n account_info = self.get_account_info(resource_group,\ + \ storage_account)\r\n container = self.create_container(account_info)\r\ + \n\r\n # create an append blob\r\n local_file = self.create_temp_file(1)\r\ + \n blob_name = self.create_random_name(prefix='blob', length=24)\r\n\r\ + \n self.storage_cmd('storage blob upload -c {} -f \"{}\" -n {} --type\ + \ append --if-none-match *', account_info,\r\n container,\ + \ local_file, blob_name)\r\n self.assertEqual(len(self.storage_cmd('storage\ + \ blob list -c {}',\r\n account_info,\ + \ container).get_output_in_json()), 1)\r\n\r\n # append if-none-match\ + \ should throw exception\r\n with self.assertRaises(Exception):\r\n \ + \ self.storage_cmd('storage blob upload -c {} -f \"{}\" -n {} --type\ + \ append --if-none-match *', account_info,\r\n container,\ + \ local_file, blob_name)\r\n\r\n\r\nif __name__ == '__main__':\r\n unittest.main()\r\ + \n" headers: Connection: [keep-alive] - Content-Length: ['18787'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + Content-Length: ['21487'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-content-type: [text/plain] x-ms-blob-type: [BlockBlob] - x-ms-date: ['Thu, 08 Feb 2018 19:30:59 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:47:53 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: body: {string: ''} headers: - content-md5: [Zd3Jo95xLQtZkAAKeMC8Qg==] - date: ['Thu, 08 Feb 2018 19:30:58 GMT'] - etag: ['"0x8D56F2A7B831D98"'] - last-modified: ['Thu, 08 Feb 2018 19:30:59 GMT'] + content-md5: [+WFZhdwHyV1SHyRq6onVEw==] + date: ['Tue, 01 May 2018 21:47:52 GMT'] + etag: ['"0x8D5AFAD313B7741"'] + last-modified: ['Tue, 01 May 2018 21:47:53 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:30:59 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:53 GMT'] x-ms-meta-a: [b] x-ms-meta-c: [d] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:30:59 GMT'] - etag: ['"0x8D56F2A7BB8E0C7"'] - last-modified: ['Thu, 08 Feb 2018 19:30:59 GMT'] + date: ['Tue, 01 May 2018 21:47:53 GMT'] + etag: ['"0x8D5AFAD316D8CF1"'] + last-modified: ['Tue, 01 May 2018 21:47:53 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:30:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:53 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:30:59 GMT'] - etag: ['"0x8D56F2A7BB8E0C7"'] - last-modified: ['Thu, 08 Feb 2018 19:30:59 GMT'] + date: ['Tue, 01 May 2018 21:47:53 GMT'] + etag: ['"0x8D5AFAD316D8CF1"'] + last-modified: ['Tue, 01 May 2018 21:47:53 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-meta-a: [b] x-ms-meta-c: [d] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:30:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:54 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:30:59 GMT'] - etag: ['"0x8D56F2A7C0C9393"'] - last-modified: ['Thu, 08 Feb 2018 19:31:00 GMT'] + date: ['Tue, 01 May 2018 21:47:53 GMT'] + etag: ['"0x8D5AFAD31E93C43"'] + last-modified: ['Tue, 01 May 2018 21:47:54 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:31:00 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:47:54 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:30:59 GMT'] - etag: ['"0x8D56F2A7C0C9393"'] - last-modified: ['Thu, 08 Feb 2018 19:31:00 GMT'] + date: ['Tue, 01 May 2018 21:47:54 GMT'] + etag: ['"0x8D5AFAD31E93C43"'] + last-modified: ['Tue, 01 May 2018 21:47:54 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null @@ -540,8 +562,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -550,11 +572,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 19:31:01 GMT'] + date: ['Tue, 01 May 2018 21:47:55 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdURDdINEZBNE9LQ08zWDNQVFlIT0VRM0hDWjRQNFFLVU1FWXxBODFDMkU3OUI2RTc5MUVFLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdDUk9TNTMzSEFOQ0xUS1pGTVlSQ0JFTkhIQjVRV1ZDNEMyT3wwQThBNzAyQ0U0NDI5MjdDLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1193'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_snapshot_operations.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_snapshot_operations.yaml index 0443596f004..2c09694d194 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_snapshot_operations.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_snapshot_operations.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:47:55Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:47:55Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:36:48 GMT'] + date: ['Tue, 01 May 2018 21:47:55 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:36:51 GMT'] + date: ['Tue, 01 May 2018 21:47:56 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/8c001b7c-bfa7-4a80-8770-7da057285bad?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b798e646-f8cb-4417-a58e-b42fe7eba2e6?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} - request: body: null @@ -65,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/8c001b7c-bfa7-4a80-8770-7da057285bad?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b798e646-f8cb-4417-a58e-b42fe7eba2e6?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:36:50.9747872Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:36:50.9747872Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:36:50.9435347Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:57.5877755Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:47:57.5877755Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:47:57.5252776Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:37:08 GMT'] + date: ['Tue, 01 May 2018 21:48:14 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -83,6 +86,7 @@ interactions: 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: null @@ -94,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"McfbAUdjb/RVU3qTjdgIr6UxAgXkMcj2KPAtEWqUQ2yQfoeMPXoAB5Hg5pO6RSx8y+q/wjoR3imnQ+xJ9oWEtQ==","permissions":"FULL"},{"keyName":"key2","value":"zK4P0jitAgSCMZMaTk1+HcdaPsVfGyRWgYitU+iVpc1tU5WQelAorllGKbB5Yrmc//1j48r7CF3Ac4GvRPgKAQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"mSQyYeFjSWcHh4OQ0cI+sM0ltIbw37uXGCXXseczOS1s6fnU78/mmq/MELZC/f/YIcITEXjXC/lnvCVu3H01QQ==","permissions":"FULL"},{"keyName":"key2","value":"oMyycaVQzQ9qbelMiFVT3v6nbIKeVoByVl4W0XnQd7vesMUvINKjuIuDm/nebGLsaBnXkpeahoCjXgznWDJKiw==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:37:09 GMT'] + date: ['Tue, 01 May 2018 21:48:16 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -112,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1196'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -124,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"McfbAUdjb/RVU3qTjdgIr6UxAgXkMcj2KPAtEWqUQ2yQfoeMPXoAB5Hg5pO6RSx8y+q/wjoR3imnQ+xJ9oWEtQ==","permissions":"FULL"},{"keyName":"key2","value":"zK4P0jitAgSCMZMaTk1+HcdaPsVfGyRWgYitU+iVpc1tU5WQelAorllGKbB5Yrmc//1j48r7CF3Ac4GvRPgKAQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"mSQyYeFjSWcHh4OQ0cI+sM0ltIbw37uXGCXXseczOS1s6fnU78/mmq/MELZC/f/YIcITEXjXC/lnvCVu3H01QQ==","permissions":"FULL"},{"keyName":"key2","value":"oMyycaVQzQ9qbelMiFVT3v6nbIKeVoByVl4W0XnQd7vesMUvINKjuIuDm/nebGLsaBnXkpeahoCjXgznWDJKiw==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:37:09 GMT'] + date: ['Tue, 01 May 2018 21:48:16 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -142,27 +147,29 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:37:10 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:48:16 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:37:11 GMT'] - etag: ['"0x8D56F2B59104B06"'] - last-modified: ['Thu, 08 Feb 2018 19:37:11 GMT'] + date: ['Tue, 01 May 2018 21:48:16 GMT'] + etag: ['"0x8D5AFAD3F79B2C1"'] + last-modified: ['Tue, 01 May 2018 21:48:17 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ @@ -3618,54 +3625,57 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['131072'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-type: [BlockBlob] - x-ms-date: ['Thu, 08 Feb 2018 19:37:11 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:48:17 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: body: {string: ''} headers: content-md5: [DfvoqkwgtS4bi/PLbL3xkw==] - date: ['Thu, 08 Feb 2018 19:37:11 GMT'] - etag: ['"0x8D56F2B597CEACA"'] - last-modified: ['Thu, 08 Feb 2018 19:37:11 GMT'] + date: ['Tue, 01 May 2018 21:48:17 GMT'] + etag: ['"0x8D5AFAD3FE3ED21"'] + last-modified: ['Tue, 01 May 2018 21:48:17 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:37:11 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:48:18 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=snapshot response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:37:11 GMT'] - etag: ['"0x8D56F2B597CEACA"'] - last-modified: ['Thu, 08 Feb 2018 19:37:11 GMT'] + date: ['Tue, 01 May 2018 21:48:18 GMT'] + etag: ['"0x8D5AFAD3FE3ED21"'] + last-modified: ['Tue, 01 May 2018 21:48:17 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-snapshot: ['2018-02-08T19:37:12.1381903Z'] - x-ms-version: ['2017-07-29'] + x-ms-snapshot: ['2018-05-01T21:48:18.2590880Z'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:37:11 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:48:18 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD - uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?snapshot=2018-02-08T19%3A37%3A12.1381903Z + uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?snapshot=2018-05-01T21%3A48%3A18.2590880Z response: body: {string: ''} headers: @@ -3673,13 +3683,14 @@ interactions: content-length: ['131072'] content-md5: [DfvoqkwgtS4bi/PLbL3xkw==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:37:11 GMT'] - etag: ['"0x8D56F2B597CEACA"'] - last-modified: ['Thu, 08 Feb 2018 19:37:11 GMT'] + date: ['Tue, 01 May 2018 21:48:18 GMT'] + etag: ['"0x8D5AFAD3FE3ED21"'] + last-modified: ['Tue, 01 May 2018 21:48:17 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:48:17 GMT'] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null @@ -3691,8 +3702,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -3701,11 +3712,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 19:37:13 GMT'] + date: ['Tue, 01 May 2018 21:48:18 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdVTFA3NEpKVExQVDY1VFlLR0hHSjdVTUxIWTRFTkZOUUpLVnw3MzJCNTA2Q0IwNkNDNTAzLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdIRjIzR0VVVUw1RzQ2VURVM0QyNVA2QjdNNVlTMjNPVjZCWnxCMUJEREZDMTAzQzU1RjFELVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_socket_timeout.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_socket_timeout.yaml index e034fa49472..47579417e79 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_socket_timeout.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_socket_timeout.yaml @@ -1,7 +1,7 @@ interactions: - request: body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", - "date": "2018-04-07T00:12:55Z"}}' + "date": "2018-05-01T21:48:19Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] @@ -11,17 +11,17 @@ interactions: Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-04-07T00:12:55Z"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:48:19Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Sat, 07 Apr 2018 00:12:56 GMT'] + date: ['Tue, 01 May 2018 21:48:20 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] @@ -39,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -49,9 +49,9 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Sat, 07 Apr 2018 00:12:59 GMT'] + date: ['Tue, 01 May 2018 21:48:21 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/01ef5cc2-8d4e-4b36-8ed8-add136c6770d?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/0d0558c2-d824-467c-9cc3-557bcfe84843?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] @@ -66,17 +66,19 @@ interactions: Accept-Encoding: ['gzip, deflate'] CommandName: [storage account create] Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] + accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/01ef5cc2-8d4e-4b36-8ed8-add136c6770d?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/0d0558c2-d824-467c-9cc3-557bcfe84843?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-04-07T00:12:59.1840796Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-04-07T00:12:59.1840796Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-04-07T00:12:59.1215645Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:21.6512920Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:48:21.6512920Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:48:21.5575410Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Sat, 07 Apr 2018 00:13:15 GMT'] + date: ['Tue, 01 May 2018 21:48:38 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -96,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"IYa076sCz4c4q+O0s/HVuP1Yh0JdguJw1DDQWsyxs1ZPYLIRp8hgDjIuZOjlyYDXD1u/7IkYN6DFI7Sv1jF3FA==","permissions":"FULL"},{"keyName":"key2","value":"GIs/71nI67FUFUXvMl1Abd8NAqZmbA80g+gbeKZ02h16GIdvWqmUvSIK3um8pDZXMnOK4vZJez69b2R+Z7akSw==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"2DyFqrFaHyg5gZoURRCMdrDd60j0YCpC/d8s77k5bvTbZvMovR3FgH26PujOoSNEEcFVRVH41UpwrYRmdXMbGg==","permissions":"FULL"},{"keyName":"key2","value":"SF8vB+fEvoYI6CrC+HuAdO43ctX7R7p5k3DzRmT5L3LnnnAtmnD0Nuc5fTiWMNifZBlSOqMPpvn27qvYvyJZkQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Sat, 07 Apr 2018 00:13:17 GMT'] + date: ['Tue, 01 May 2018 21:48:39 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -115,7 +117,7 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null @@ -127,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.31] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"IYa076sCz4c4q+O0s/HVuP1Yh0JdguJw1DDQWsyxs1ZPYLIRp8hgDjIuZOjlyYDXD1u/7IkYN6DFI7Sv1jF3FA==","permissions":"FULL"},{"keyName":"key2","value":"GIs/71nI67FUFUXvMl1Abd8NAqZmbA80g+gbeKZ02h16GIdvWqmUvSIK3um8pDZXMnOK4vZJez69b2R+Z7akSw==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"2DyFqrFaHyg5gZoURRCMdrDd60j0YCpC/d8s77k5bvTbZvMovR3FgH26PujOoSNEEcFVRVH41UpwrYRmdXMbGg==","permissions":"FULL"},{"keyName":"key2","value":"SF8vB+fEvoYI6CrC+HuAdO43ctX7R7p5k3DzRmT5L3LnnnAtmnD0Nuc5fTiWMNifZBlSOqMPpvn27qvYvyJZkQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Sat, 07 Apr 2018 00:13:17 GMT'] + date: ['Tue, 01 May 2018 21:48:40 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -146,45 +148,47 @@ interactions: transfer-encoding: [chunked] vary: [Accept-Encoding] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1198'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.31] - x-ms-date: ['Sat, 07 Apr 2018 00:13:18 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:48:41 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004?restype=container response: body: {string: ''} headers: - date: ['Sat, 07 Apr 2018 00:13:18 GMT'] - etag: ['"0x8D59C1C5DE25CCF"'] - last-modified: ['Sat, 07 Apr 2018 00:13:19 GMT'] + date: ['Tue, 01 May 2018 21:48:40 GMT'] + etag: ['"0x8D5AFAD4DCDD1D8"'] + last-modified: ['Tue, 01 May 2018 21:48:41 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.31] - x-ms-date: ['Sat, 07 Apr 2018 00:14:18 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:49:37 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: body: {string: ''} headers: - date: ['Sat, 07 Apr 2018 00:14:18 GMT'] + date: ['Tue, 01 May 2018 21:49:37 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-error-code: [BlobNotFound] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 404, message: The specified blob does not exist.} - request: body: "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ @@ -217,31 +221,33 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['1024'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.31] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-type: [BlockBlob] - x-ms-date: ['Sat, 07 Apr 2018 00:14:19 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:49:38 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: body: {string: ''} headers: content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] - date: ['Sat, 07 Apr 2018 00:14:18 GMT'] - etag: ['"0x8D59C1C81B17816"'] - last-modified: ['Sat, 07 Apr 2018 00:14:19 GMT'] + date: ['Tue, 01 May 2018 21:49:37 GMT'] + etag: ['"0x8D5AFAD6FD24C68"'] + last-modified: ['Tue, 01 May 2018 21:49:38 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.31] - x-ms-date: ['Sat, 07 Apr 2018 00:14:19 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:49:38 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -251,23 +257,25 @@ interactions: content-length: ['1024'] content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] content-type: [application/octet-stream] - date: ['Sat, 07 Apr 2018 00:14:19 GMT'] - etag: ['"0x8D59C1C81B17816"'] - last-modified: ['Sat, 07 Apr 2018 00:14:19 GMT'] + date: ['Tue, 01 May 2018 21:49:38 GMT'] + etag: ['"0x8D5AFAD6FD24C68"'] + last-modified: ['Tue, 01 May 2018 21:49:38 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:49:38 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.31] - x-ms-date: ['Sat, 07 Apr 2018 00:14:19 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:49:38 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -277,24 +285,26 @@ interactions: content-length: ['1024'] content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] content-type: [application/octet-stream] - date: ['Sat, 07 Apr 2018 00:14:19 GMT'] - etag: ['"0x8D59C1C81B17816"'] - last-modified: ['Sat, 07 Apr 2018 00:14:19 GMT'] + date: ['Tue, 01 May 2018 21:49:38 GMT'] + etag: ['"0x8D5AFAD6FD24C68"'] + last-modified: ['Tue, 01 May 2018 21:49:38 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:49:38 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.31] - x-ms-date: ['Sat, 07 Apr 2018 00:14:20 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:49:39 GMT'] x-ms-range: [bytes=0-33554431] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -331,16 +341,17 @@ interactions: content-length: ['1024'] content-range: [bytes 0-1023/1024] content-type: [application/octet-stream] - date: ['Sat, 07 Apr 2018 00:14:20 GMT'] - etag: ['"0x8D59C1C81B17816"'] - last-modified: ['Sat, 07 Apr 2018 00:14:19 GMT'] + date: ['Tue, 01 May 2018 21:49:38 GMT'] + etag: ['"0x8D5AFAD6FD24C68"'] + last-modified: ['Tue, 01 May 2018 21:49:38 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:49:38 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 206, message: Partial Content} - request: body: null @@ -353,7 +364,7 @@ interactions: Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.31] + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -362,12 +373,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Sat, 07 Apr 2018 00:14:21 GMT'] + date: ['Tue, 01 May 2018 21:49:39 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdLWjRPMzNBUlFYTTNYUUFJTjYzVjVXRlpISkdEMlNOUFdLWHwyMkU5QzM0MjVBQ0Q1N0U4LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdQUjJSNjM0RUdHUkpFWTJKWDdJWkJMREFZR01GUE80T1oyM3w2QTZCNkNBRDM4RTNBNDEyLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] x-content-type-options: [nosniff] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_soft_delete.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_soft_delete.yaml index 59e6c9f00f4..6bf6731b419 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_soft_delete.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_soft_delete.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:49:39Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:49:39Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:31:29 GMT'] + date: ['Tue, 01 May 2018 21:49:40 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:31:31 GMT'] + date: ['Tue, 01 May 2018 21:49:41 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a8daa5ce-f344-45ea-a9bc-fb5c1a16a9f3?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/67812c24-890c-48ed-9849-0005e7354367?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1195'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a8daa5ce-f344-45ea-a9bc-fb5c1a16a9f3?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/67812c24-890c-48ed-9849-0005e7354367?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:31:49 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a8daa5ce-f344-45ea-a9bc-fb5c1a16a9f3?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a8daa5ce-f344-45ea-a9bc-fb5c1a16a9f3?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:31:31.9097589Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:31:31.9097589Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:31:31.8628627Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:49:41.9342494Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:49:41.9342494Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:49:41.8561236Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:32:06 GMT'] + date: ['Tue, 01 May 2018 21:49:59 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"zoX/BuIQQNp6F1/u0onvdZw324M3I+0M1oSUMzhItBY3H6lpHnGPylVYqdglQVRGps8GliIcvgjKIgbaK8hyow==","permissions":"FULL"},{"keyName":"key2","value":"XbkNiuQaxUMRqNldTN8uwn71GuiAhngso8QuVxOiHdXEfY/MPTQLh2GZ23brHygh7Lp++ZEmQidBWC537+GOyw==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"qf+rZABzdZKtF9qE66GwfTkLDDn1zrL1gdhmcDMILeI52dsGc9+YJ9MCg+qtQ8vW4pa4Zr3uE8A2hZaB2ZaM/Q==","permissions":"FULL"},{"keyName":"key2","value":"zCQl9+O2FWIJFZvwRAIlcJwUe/j+wBKWmmCrCuKFVPjaiMHcMnJGeKGpKJbOgG90VP1DO1pdFAp2qCNqLC9kOQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:32:07 GMT'] + date: ['Tue, 01 May 2018 21:50:00 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -151,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"zoX/BuIQQNp6F1/u0onvdZw324M3I+0M1oSUMzhItBY3H6lpHnGPylVYqdglQVRGps8GliIcvgjKIgbaK8hyow==","permissions":"FULL"},{"keyName":"key2","value":"XbkNiuQaxUMRqNldTN8uwn71GuiAhngso8QuVxOiHdXEfY/MPTQLh2GZ23brHygh7Lp++ZEmQidBWC537+GOyw==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"qf+rZABzdZKtF9qE66GwfTkLDDn1zrL1gdhmcDMILeI52dsGc9+YJ9MCg+qtQ8vW4pa4Zr3uE8A2hZaB2ZaM/Q==","permissions":"FULL"},{"keyName":"key2","value":"zCQl9+O2FWIJFZvwRAIlcJwUe/j+wBKWmmCrCuKFVPjaiMHcMnJGeKGpKJbOgG90VP1DO1pdFAp2qCNqLC9kOQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:32:10 GMT'] + date: ['Tue, 01 May 2018 21:50:00 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -169,27 +147,29 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1192'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:11 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:01 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:32:11 GMT'] - etag: ['"0x8D56F2AA6BC34C0"'] - last-modified: ['Thu, 08 Feb 2018 19:32:11 GMT'] + date: ['Tue, 01 May 2018 21:50:01 GMT'] + etag: ['"0x8D5AFAD7DD3A5C1"'] + last-modified: ['Tue, 01 May 2018 21:50:01 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ @@ -222,55 +202,59 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['1024'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-type: [BlockBlob] - x-ms-date: ['Thu, 08 Feb 2018 19:32:11 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:50:02 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: body: {string: ''} headers: content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] - date: ['Thu, 08 Feb 2018 19:32:12 GMT'] - etag: ['"0x8D56F2AA6F1F969"'] - last-modified: ['Thu, 08 Feb 2018 19:32:12 GMT'] + date: ['Tue, 01 May 2018 21:50:01 GMT'] + etag: ['"0x8D5AFAD7E48DFBF"'] + last-modified: ['Tue, 01 May 2018 21:50:02 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:12 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:02 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=list response: body: {string: "\uFEFFblob000004Thu,\ - \ 08 Feb 2018 19:32:12 GMT0x8D56F2AA6F1F9691024application/octet-streamblob000004Tue,\ + \ 01 May 2018 21:50:02 GMTTue, 01 May 2018\ + \ 21:50:02 GMT0x8D5AFAD7E48DFBF1024application/octet-streamDzQ7CTESaiDxM9Z8KwGKOw==BlockBlobunlockedavailabletrue"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:32:11 GMT'] + date: ['Tue, 01 May 2018 21:50:02 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:12 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:03 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -278,10 +262,10 @@ interactions: \ />false"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:32:12 GMT'] + date: ['Tue, 01 May 2018 21:50:02 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -290,26 +274,28 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['176'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:12 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:03 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:32:12 GMT'] + date: ['Tue, 01 May 2018 21:50:02 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:12 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:03 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -317,18 +303,19 @@ interactions: \ />true2"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:32:12 GMT'] + date: ['Tue, 01 May 2018 21:50:03 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:12 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:04 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -336,37 +323,39 @@ interactions: \ />true2"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:32:12 GMT'] + date: ['Tue, 01 May 2018 21:50:04 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:13 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:04 GMT'] + x-ms-version: ['2017-11-09'] method: DELETE uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004 response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:32:13 GMT'] + date: ['Tue, 01 May 2018 21:50:04 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-delete-type-permanent: ['false'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:13 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:05 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=list response: @@ -375,77 +364,82 @@ interactions: cont000003\">"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:32:13 GMT'] + date: ['Tue, 01 May 2018 21:50:05 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:13 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:05 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=list&include=deleted response: body: {string: "\uFEFFblob000004trueThu,\ - \ 08 Feb 2018 19:32:12 GMT0x8D56F2AA6F1F9691024application/octet-streamblob000004trueTue,\ + \ 01 May 2018 21:50:02 GMTTue, 01 May 2018\ + \ 21:50:02 GMT0x8D5AFAD7E48DFBF1024application/octet-streamDzQ7CTESaiDxM9Z8KwGKOw==BlockBlobtrueThu,\ - \ 08 Feb 2018 19:32:13 GMT1BlockBlobtrueTue,\ + \ 01 May 2018 21:50:04 GMT1"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:32:13 GMT'] + date: ['Tue, 01 May 2018 21:50:05 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:14 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:06 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003/blob000004?comp=undelete response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:32:14 GMT'] + date: ['Tue, 01 May 2018 21:50:06 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:14 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:07 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=list response: body: {string: "\uFEFFblob000004Thu,\ - \ 08 Feb 2018 19:32:12 GMT0x8D56F2AA6F1F9691024application/octet-streamblob000004Tue,\ + \ 01 May 2018 21:50:02 GMTTue, 01 May 2018\ + \ 21:50:02 GMT0x8D5AFAD7E48DFBF1024application/octet-streamDzQ7CTESaiDxM9Z8KwGKOw==BlockBlobunlockedavailabletrue"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:32:14 GMT'] + date: ['Tue, 01 May 2018 21:50:07 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null @@ -457,8 +451,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -467,11 +461,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 19:32:14 GMT'] + date: ['Tue, 01 May 2018 21:50:07 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdZWkZJSVhSR0U0WE5ZVkhSUEpPSkdPSklBTUVSTjZUNlJDRHw1QTQzRENGQkEyMUNEMThCLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdaQkNSRUJLN09NQ0JGVVFMSTRSUVlMSEdNTkEyRUs3TjVYQ3xERkQ3RkIyMTUyNkQ2Q0EyLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1191'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_upload_midsize_file.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_upload_midsize_file.yaml index c72843f052f..5085add5b0a 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_upload_midsize_file.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_upload_midsize_file.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:50:08Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:50:08Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:32:16 GMT'] + date: ['Tue, 01 May 2018 21:50:08 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,41 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:32:17 GMT'] + date: ['Tue, 01 May 2018 21:50:12 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/61ac7975-3916-4dc7-bdc6-10e4d05d0601?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1189'] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/61ac7975-3916-4dc7-bdc6-10e4d05d0601?monitor=true&api-version=2017-10-01 - response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:32:35 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/61ac7975-3916-4dc7-bdc6-10e4d05d0601?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/d2cb0d08-1dbb-463a-8515-c7c3925f6e97?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1193'] status: {code: 202, message: Accepted} - request: body: null @@ -92,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/61ac7975-3916-4dc7-bdc6-10e4d05d0601?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/d2cb0d08-1dbb-463a-8515-c7c3925f6e97?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:32:17.8634316Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:32:17.8634316Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:32:17.8165491Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:12.9813351Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:12.9813351Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:12.9031978Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:32:51 GMT'] + date: ['Tue, 01 May 2018 21:50:29 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"Ur7LsInvxGhacID5lpL8Aje1Xsl6NNAIfo+RtPWdpeoUmiGhBGkJ9/PQt+gJPFVWHwKo+g07PFyWj6LK6iFlXQ==","permissions":"FULL"},{"keyName":"key2","value":"B7HOmVbjDvHp8TGYKUHAiN7z6Ixx7j3M4w2n915R8pRynF9JwO5U07uFi0tWDfx+Olh3YgU0Oh5tv2UY6oZqSw==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"wRXnasKn+uHsAFzJlB0u452e3gzhrQgPSPautk76CDMNoCxVMDPdh9Sg9oDCQFpskuOfm61yXzsTD1GcfLU4mA==","permissions":"FULL"},{"keyName":"key2","value":"IkNMTb0ze5MM6VxN5vSlqxb4NzFLjwyUgn6VZjmTpCOoDwC/lXxIsJTH52C9kDxJxxoogWxa1r2QEergHPJ8rw==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:32:53 GMT'] + date: ['Tue, 01 May 2018 21:50:31 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1185'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1194'] status: {code: 200, message: OK} - request: body: null @@ -151,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"Ur7LsInvxGhacID5lpL8Aje1Xsl6NNAIfo+RtPWdpeoUmiGhBGkJ9/PQt+gJPFVWHwKo+g07PFyWj6LK6iFlXQ==","permissions":"FULL"},{"keyName":"key2","value":"B7HOmVbjDvHp8TGYKUHAiN7z6Ixx7j3M4w2n915R8pRynF9JwO5U07uFi0tWDfx+Olh3YgU0Oh5tv2UY6oZqSw==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"wRXnasKn+uHsAFzJlB0u452e3gzhrQgPSPautk76CDMNoCxVMDPdh9Sg9oDCQFpskuOfm61yXzsTD1GcfLU4mA==","permissions":"FULL"},{"keyName":"key2","value":"IkNMTb0ze5MM6VxN5vSlqxb4NzFLjwyUgn6VZjmTpCOoDwC/lXxIsJTH52C9kDxJxxoogWxa1r2QEergHPJ8rw==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:32:57 GMT'] + date: ['Tue, 01 May 2018 21:50:32 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -169,45 +147,48 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1193'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:57 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:32 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:32:58 GMT'] - etag: ['"0x8D56F2AC268C0EE"'] - last-modified: ['Thu, 08 Feb 2018 19:32:58 GMT'] + date: ['Tue, 01 May 2018 21:50:32 GMT'] + etag: ['"0x8D5AFAD90808EA6"'] + last-modified: ['Tue, 01 May 2018 21:50:33 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:58 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:33 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:32:58 GMT'] + date: ['Tue, 01 May 2018 21:50:33 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-error-code: [BlobNotFound] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 404, message: The specified blob does not exist.} - request: body: '!!! The request body has been omitted from the recording because its size @@ -215,31 +196,33 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['4194304'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-type: [BlockBlob] - x-ms-date: ['Thu, 08 Feb 2018 19:32:58 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:50:33 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: body: {string: ''} headers: content-md5: [tc+p1sj+vWGPkawoQ9UKHA==] - date: ['Thu, 08 Feb 2018 19:32:59 GMT'] - etag: ['"0x8D56F2AC2F8A79D"'] - last-modified: ['Thu, 08 Feb 2018 19:32:59 GMT'] + date: ['Tue, 01 May 2018 21:50:35 GMT'] + etag: ['"0x8D5AFAD91EC6872"'] + last-modified: ['Tue, 01 May 2018 21:50:35 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:35 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -249,47 +232,51 @@ interactions: content-length: ['4194304'] content-md5: [tc+p1sj+vWGPkawoQ9UKHA==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:32:58 GMT'] - etag: ['"0x8D56F2AC2F8A79D"'] - last-modified: ['Thu, 08 Feb 2018 19:32:59 GMT'] + date: ['Tue, 01 May 2018 21:50:35 GMT'] + etag: ['"0x8D5AFAD91EC6872"'] + last-modified: ['Tue, 01 May 2018 21:50:35 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:50:35 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:36 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000004?restype=container&comp=list&maxresults=1 response: body: {string: "\uFEFF1blob000003Thu,\ - \ 08 Feb 2018 19:32:59 GMT0x8D56F2AC2F8A79D4194304application/octet-stream1blob000003Tue,\ + \ 01 May 2018 21:50:35 GMTTue, 01 May 2018\ + \ 21:50:35 GMT0x8D5AFAD91EC68724194304application/octet-streamtc+p1sj+vWGPkawoQ9UKHA==BlockBlobunlockedavailabletrue"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:32:59 GMT'] + date: ['Tue, 01 May 2018 21:50:36 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:32:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:36 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -299,23 +286,25 @@ interactions: content-length: ['4194304'] content-md5: [tc+p1sj+vWGPkawoQ9UKHA==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:33:00 GMT'] - etag: ['"0x8D56F2AC2F8A79D"'] - last-modified: ['Thu, 08 Feb 2018 19:32:59 GMT'] + date: ['Tue, 01 May 2018 21:50:36 GMT'] + etag: ['"0x8D5AFAD91EC6872"'] + last-modified: ['Tue, 01 May 2018 21:50:35 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:50:35 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:00 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:37 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -325,45 +314,48 @@ interactions: content-length: ['4194304'] content-md5: [tc+p1sj+vWGPkawoQ9UKHA==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:33:00 GMT'] - etag: ['"0x8D56F2AC2F8A79D"'] - last-modified: ['Thu, 08 Feb 2018 19:32:59 GMT'] + date: ['Tue, 01 May 2018 21:50:37 GMT'] + etag: ['"0x8D5AFAD91EC6872"'] + last-modified: ['Tue, 01 May 2018 21:50:35 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:50:35 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-content-md5: [tc+p1sj+vWGPkawoQ9UKHA==] x-ms-blob-content-type: [application/test-content] - x-ms-date: ['Thu, 08 Feb 2018 19:33:00 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:50:38 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003?comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:33:00 GMT'] - etag: ['"0x8D56F2AC3F9C77F"'] - last-modified: ['Thu, 08 Feb 2018 19:33:01 GMT'] + date: ['Tue, 01 May 2018 21:50:38 GMT'] + etag: ['"0x8D5AFAD93C17DFB"'] + last-modified: ['Tue, 01 May 2018 21:50:38 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:00 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:38 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -373,23 +365,25 @@ interactions: content-length: ['4194304'] content-md5: [tc+p1sj+vWGPkawoQ9UKHA==] content-type: [application/test-content] - date: ['Thu, 08 Feb 2018 19:33:00 GMT'] - etag: ['"0x8D56F2AC3F9C77F"'] - last-modified: ['Thu, 08 Feb 2018 19:33:01 GMT'] + date: ['Tue, 01 May 2018 21:50:38 GMT'] + etag: ['"0x8D5AFAD93C17DFB"'] + last-modified: ['Tue, 01 May 2018 21:50:38 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:50:35 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:01 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:39 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -397,19 +391,20 @@ interactions: \ />false"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:01 GMT'] + date: ['Tue, 01 May 2018 21:50:39 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:01 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:39 GMT'] x-ms-range: [bytes=0-33554431] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -421,25 +416,27 @@ interactions: content-length: ['4194304'] content-range: [bytes 0-4194303/4194304] content-type: [application/test-content] - date: ['Thu, 08 Feb 2018 19:33:01 GMT'] - etag: ['"0x8D56F2AC3F9C77F"'] - last-modified: ['Thu, 08 Feb 2018 19:33:01 GMT'] + date: ['Tue, 01 May 2018 21:50:39 GMT'] + etag: ['"0x8D5AFAD93C17DFB"'] + last-modified: ['Tue, 01 May 2018 21:50:38 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-content-md5: [tc+p1sj+vWGPkawoQ9UKHA==] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:50:35 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 206, message: Partial Content} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:02 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:50:41 GMT'] x-ms-range: [bytes=10-499] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -462,16 +459,17 @@ interactions: content-length: ['490'] content-range: [bytes 10-499/4194304] content-type: [application/test-content] - date: ['Thu, 08 Feb 2018 19:33:02 GMT'] - etag: ['"0x8D56F2AC3F9C77F"'] - last-modified: ['Thu, 08 Feb 2018 19:33:01 GMT'] + date: ['Tue, 01 May 2018 21:50:41 GMT'] + etag: ['"0x8D5AFAD93C17DFB"'] + last-modified: ['Tue, 01 May 2018 21:50:38 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-content-md5: [tc+p1sj+vWGPkawoQ9UKHA==] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:50:35 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 206, message: Partial Content} - request: body: null @@ -483,8 +481,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -493,11 +491,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 19:33:02 GMT'] + date: ['Tue, 01 May 2018 21:50:42 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdWN01GTjdNVkE2SEtYQTM0UkpWSUVYMzZTQVhWNEc0R01ZVnxGRjFCNUY2Q0FCQTU5Mjc5LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdFVVZXVUlTRUUyWlVQSTdQUUJPWVpFWEVYUE9GSVdJVlJQTnw3ODBEOTlGNjg5OEREQzc5LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] + x-content-type-options: [nosniff] x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_upload_small_file.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_upload_small_file.yaml index 6d5b1479ca2..09bb3a15605 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_upload_small_file.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_blob_upload_small_file.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:50:42Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:50:42Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:33:04 GMT'] + date: ['Tue, 01 May 2018 21:50:43 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 19:33:04 GMT'] + date: ['Tue, 01 May 2018 21:50:45 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b3813c61-d24a-4a6a-b393-8ae2012c775e?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a3e66f58-ff0e-4387-9e2e-de3b957ff650?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 202, message: Accepted} - request: body: null @@ -65,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b3813c61-d24a-4a6a-b393-8ae2012c775e?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a3e66f58-ff0e-4387-9e2e-de3b957ff650?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T19:33:05.2234370Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T19:33:05.2234370Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T19:33:05.1765750Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:45.5284344Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:50:45.5284344Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:50:45.4346559Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:33:22 GMT'] + date: ['Tue, 01 May 2018 21:51:02 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -83,6 +86,7 @@ interactions: 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: null @@ -94,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"LA5+NYEamcl0Wtl8VJccTfEAB0aUcHoZ1nPcRr2Mu66Sudk7EYA/cvQ/T+cekNBz9zSH2GbKUDykkbpRjpLIwg==","permissions":"FULL"},{"keyName":"key2","value":"MCsIoNqh2jhX4bFJqQdNUzKXfMFP7b8F/MAr94J22axeaL2NND9Rj2MLhe6ejC3oCN2oCyllWnRMfYn62rr0KQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"2mimZZUxn/JURj3ieoLKDLHvhOqq7YF+KiSObdcWZPpq6j95Bs+4quDv2VWy+IVb2L/mydR+7GwDEAV5z5n4SA==","permissions":"FULL"},{"keyName":"key2","value":"4haHUQSrifOctcUoGTnqmHGlstV78WSzvXT/iQ2XUOj9t1SmxXFZEepiDFABNa7BgJ+fDlWeSO/QEaZKWVet6w==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:33:23 GMT'] + date: ['Tue, 01 May 2018 21:51:03 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -112,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1193'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null @@ -124,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"LA5+NYEamcl0Wtl8VJccTfEAB0aUcHoZ1nPcRr2Mu66Sudk7EYA/cvQ/T+cekNBz9zSH2GbKUDykkbpRjpLIwg==","permissions":"FULL"},{"keyName":"key2","value":"MCsIoNqh2jhX4bFJqQdNUzKXfMFP7b8F/MAr94J22axeaL2NND9Rj2MLhe6ejC3oCN2oCyllWnRMfYn62rr0KQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"2mimZZUxn/JURj3ieoLKDLHvhOqq7YF+KiSObdcWZPpq6j95Bs+4quDv2VWy+IVb2L/mydR+7GwDEAV5z5n4SA==","permissions":"FULL"},{"keyName":"key2","value":"4haHUQSrifOctcUoGTnqmHGlstV78WSzvXT/iQ2XUOj9t1SmxXFZEepiDFABNa7BgJ+fDlWeSO/QEaZKWVet6w==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 19:33:23 GMT'] + date: ['Tue, 01 May 2018 21:51:04 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -142,45 +147,48 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1188'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1195'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:24 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:04 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:33:24 GMT'] - etag: ['"0x8D56F2AD2618067"'] - last-modified: ['Thu, 08 Feb 2018 19:33:25 GMT'] + date: ['Tue, 01 May 2018 21:51:04 GMT'] + etag: ['"0x8D5AFADA3A22AA1"'] + last-modified: ['Tue, 01 May 2018 21:51:05 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:25 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:05 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:33:24 GMT'] + date: ['Tue, 01 May 2018 21:51:05 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-error-code: [BlobNotFound] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 404, message: The specified blob does not exist.} - request: body: "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ @@ -213,31 +221,33 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['1024'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-type: [BlockBlob] - x-ms-date: ['Thu, 08 Feb 2018 19:33:25 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:51:05 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: body: {string: ''} headers: content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] - date: ['Thu, 08 Feb 2018 19:33:24 GMT'] - etag: ['"0x8D56F2AD2B1805D"'] - last-modified: ['Thu, 08 Feb 2018 19:33:25 GMT'] + date: ['Tue, 01 May 2018 21:51:05 GMT'] + etag: ['"0x8D5AFADA4139239"'] + last-modified: ['Tue, 01 May 2018 21:51:05 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:25 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:06 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -247,47 +257,51 @@ interactions: content-length: ['1024'] content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:33:25 GMT'] - etag: ['"0x8D56F2AD2B1805D"'] - last-modified: ['Thu, 08 Feb 2018 19:33:25 GMT'] + date: ['Tue, 01 May 2018 21:51:06 GMT'] + etag: ['"0x8D5AFADA4139239"'] + last-modified: ['Tue, 01 May 2018 21:51:05 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:51:05 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:25 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:06 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000004?restype=container&comp=list&maxresults=1 response: body: {string: "\uFEFF1blob000003Thu,\ - \ 08 Feb 2018 19:33:25 GMT0x8D56F2AD2B1805D1024application/octet-stream1blob000003Tue,\ + \ 01 May 2018 21:51:05 GMTTue, 01 May 2018\ + \ 21:51:05 GMT0x8D5AFADA41392391024application/octet-streamDzQ7CTESaiDxM9Z8KwGKOw==BlockBlobunlockedavailabletrue"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:25 GMT'] + date: ['Tue, 01 May 2018 21:51:06 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:26 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:07 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -297,23 +311,25 @@ interactions: content-length: ['1024'] content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:33:26 GMT'] - etag: ['"0x8D56F2AD2B1805D"'] - last-modified: ['Thu, 08 Feb 2018 19:33:25 GMT'] + date: ['Tue, 01 May 2018 21:51:07 GMT'] + etag: ['"0x8D5AFADA4139239"'] + last-modified: ['Tue, 01 May 2018 21:51:05 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:51:05 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:26 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:07 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -323,45 +339,48 @@ interactions: content-length: ['1024'] content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 19:33:26 GMT'] - etag: ['"0x8D56F2AD2B1805D"'] - last-modified: ['Thu, 08 Feb 2018 19:33:25 GMT'] + date: ['Tue, 01 May 2018 21:51:07 GMT'] + etag: ['"0x8D5AFADA4139239"'] + last-modified: ['Tue, 01 May 2018 21:51:05 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:51:05 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] x-ms-blob-content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] x-ms-blob-content-type: [application/test-content] - x-ms-date: ['Thu, 08 Feb 2018 19:33:26 GMT'] - x-ms-version: ['2017-07-29'] + x-ms-date: ['Tue, 01 May 2018 21:51:07 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003?comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 19:33:26 GMT'] - etag: ['"0x8D56F2AD393A1C2"'] - last-modified: ['Thu, 08 Feb 2018 19:33:27 GMT'] + date: ['Tue, 01 May 2018 21:51:07 GMT'] + etag: ['"0x8D5AFADA5644442"'] + last-modified: ['Tue, 01 May 2018 21:51:08 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:26 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:08 GMT'] + x-ms-version: ['2017-11-09'] method: HEAD uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -371,23 +390,25 @@ interactions: content-length: ['1024'] content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] content-type: [application/test-content] - date: ['Thu, 08 Feb 2018 19:33:26 GMT'] - etag: ['"0x8D56F2AD393A1C2"'] - last-modified: ['Thu, 08 Feb 2018 19:33:27 GMT'] + date: ['Tue, 01 May 2018 21:51:08 GMT'] + etag: ['"0x8D5AFADA5644442"'] + last-modified: ['Tue, 01 May 2018 21:51:08 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:51:05 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:27 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:08 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -395,19 +416,20 @@ interactions: \ />false"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 19:33:27 GMT'] + date: ['Tue, 01 May 2018 21:51:08 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:27 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:09 GMT'] x-ms-range: [bytes=0-33554431] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -444,25 +466,27 @@ interactions: content-length: ['1024'] content-range: [bytes 0-1023/1024] content-type: [application/test-content] - date: ['Thu, 08 Feb 2018 19:33:26 GMT'] - etag: ['"0x8D56F2AD393A1C2"'] - last-modified: ['Thu, 08 Feb 2018 19:33:27 GMT'] + date: ['Tue, 01 May 2018 21:51:08 GMT'] + etag: ['"0x8D5AFADA5644442"'] + last-modified: ['Tue, 01 May 2018 21:51:08 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:51:05 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 206, message: Partial Content} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 19:33:27 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:51:09 GMT'] x-ms-range: [bytes=10-499] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000004/blob000003 response: @@ -485,16 +509,17 @@ interactions: content-length: ['490'] content-range: [bytes 10-499/1024] content-type: [application/test-content] - date: ['Thu, 08 Feb 2018 19:33:27 GMT'] - etag: ['"0x8D56F2AD393A1C2"'] - last-modified: ['Thu, 08 Feb 2018 19:33:27 GMT'] + date: ['Tue, 01 May 2018 21:51:09 GMT'] + etag: ['"0x8D5AFADA5644442"'] + last-modified: ['Tue, 01 May 2018 21:51:08 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] x-ms-blob-content-md5: [DzQ7CTESaiDxM9Z8KwGKOw==] x-ms-blob-type: [BlockBlob] + x-ms-creation-time: ['Tue, 01 May 2018 21:51:05 GMT'] x-ms-lease-state: [available] x-ms-lease-status: [unlocked] x-ms-server-encrypted: ['true'] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 206, message: Partial Content} - request: body: null @@ -506,8 +531,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -516,11 +541,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 19:33:29 GMT'] + date: ['Tue, 01 May 2018 21:51:09 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdBVU9JSzNLUVBQM0syNEEzTVQyTkdPRVFIT1A3WEJKWlJZQ3wxNEQwNTA2NTNGMEM0QUVELVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdZS1JHUzNaUFY3UE41SUFKS0lNNUZNRzVWS0o1SjVKMkRUUXxBNEYxNDk3QkEzRkE4NDg4LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1195'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_container_acl_scenarios.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_container_acl_scenarios.yaml index eefde60ba52..4f5f4b5b364 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_container_acl_scenarios.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_container_acl_scenarios.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:45:23Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:45:23Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:35 GMT'] + date: ['Tue, 01 May 2018 21:45:24 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1178'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:37 GMT'] + date: ['Tue, 01 May 2018 21:45:26 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a3ff11a2-2cbd-45c8-8170-bbe8282176fb?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/80f70c06-ac48-4d85-8e66-91f2b48f0f93?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} - request: body: null @@ -65,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a3ff11a2-2cbd-45c8-8170-bbe8282176fb?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/80f70c06-ac48-4d85-8e66-91f2b48f0f93?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:37.4609831Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:37.4609831Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:09:37.4141297Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:26.3557297Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:26.3557297Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:26.0744949Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:09:54 GMT'] + date: ['Tue, 01 May 2018 21:45:42 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -83,6 +86,7 @@ interactions: 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: null @@ -94,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"SJ0uzeZHe3ZgpAaauzxRImggR4O0xMAPa/YamrQOAR0fjbg2IBE7HHyTBEVsImHZhVZZBamKATZaBVXEzTSHiA==","permissions":"FULL"},{"keyName":"key2","value":"kvVhqfMatIwS8dSQCyrewNf/8uhaLuj/jeraDJwVMJUZ3AxxZxQx/JhkDErQTydQGAeT9xrdxEiZXQzX/evOlQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"5DQL2KGZRDhCaj6aCM7nJXgWhouvokVB/HJJ8Jfqjv1eu4L49vaRPLk5v2r6ow251rrlMDsRxd127E+PtxlZOA==","permissions":"FULL"},{"keyName":"key2","value":"pngx0eu+HKX1JODUx870j4a6jc/Cy3o/LJ7GR9pS+pKJfxEqj4FZ7LwBrU8MWSlM047seum0bN4nKKJQ8xnD/A==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:09:56 GMT'] + date: ['Tue, 01 May 2018 21:45:44 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -112,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1177'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null @@ -124,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"SJ0uzeZHe3ZgpAaauzxRImggR4O0xMAPa/YamrQOAR0fjbg2IBE7HHyTBEVsImHZhVZZBamKATZaBVXEzTSHiA==","permissions":"FULL"},{"keyName":"key2","value":"kvVhqfMatIwS8dSQCyrewNf/8uhaLuj/jeraDJwVMJUZ3AxxZxQx/JhkDErQTydQGAeT9xrdxEiZXQzX/evOlQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"5DQL2KGZRDhCaj6aCM7nJXgWhouvokVB/HJJ8Jfqjv1eu4L49vaRPLk5v2r6ow251rrlMDsRxd127E+PtxlZOA==","permissions":"FULL"},{"keyName":"key2","value":"pngx0eu+HKX1JODUx870j4a6jc/Cy3o/LJ7GR9pS+pKJfxEqj4FZ7LwBrU8MWSlM047seum0bN4nKKJQ8xnD/A==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:09:57 GMT'] + date: ['Tue, 01 May 2018 21:45:45 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -142,35 +147,38 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1189'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:57 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:45 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:09:57 GMT'] - etag: ['"0x8D56F1F29E8BE16"'] - last-modified: ['Thu, 08 Feb 2018 18:09:58 GMT'] + date: ['Tue, 01 May 2018 21:45:45 GMT'] + etag: ['"0x8D5AFACE55529E7"'] + last-modified: ['Tue, 01 May 2018 21:45:45 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 201, message: Created} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:46 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: @@ -178,20 +186,21 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - etag: ['"0x8D56F1F29E8BE16"'] - last-modified: ['Thu, 08 Feb 2018 18:09:58 GMT'] + date: ['Tue, 01 May 2018 21:45:46 GMT'] + etag: ['"0x8D5AFACE55529E7"'] + last-modified: ['Tue, 01 May 2018 21:45:45 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:46 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: @@ -199,12 +208,12 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - etag: ['"0x8D56F1F29E8BE16"'] - last-modified: ['Thu, 08 Feb 2018 18:09:58 GMT'] + date: ['Tue, 01 May 2018 21:45:45 GMT'] + etag: ['"0x8D5AFACE55529E7"'] + last-modified: ['Tue, 01 May 2018 21:45:45 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -213,40 +222,42 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['184'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:46 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - etag: ['"0x8D56F1F2A469256"'] - last-modified: ['Thu, 08 Feb 2018 18:09:58 GMT'] + date: ['Tue, 01 May 2018 21:45:45 GMT'] + etag: ['"0x8D5AFACE5C4F7B7"'] + last-modified: ['Tue, 01 May 2018 21:45:46 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:46 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1l"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - etag: ['"0x8D56F1F2A469256"'] - last-modified: ['Thu, 08 Feb 2018 18:09:58 GMT'] + date: ['Tue, 01 May 2018 21:45:46 GMT'] + etag: ['"0x8D5AFACE5C4F7B7"'] + last-modified: ['Tue, 01 May 2018 21:45:46 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -255,40 +266,42 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['296'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:47 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - etag: ['"0x8D56F1F2A780BD5"'] - last-modified: ['Thu, 08 Feb 2018 18:09:58 GMT'] + date: ['Tue, 01 May 2018 21:45:46 GMT'] + etag: ['"0x8D5AFACE5FE617E"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:47 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Z"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - etag: ['"0x8D56F1F2A780BD5"'] - last-modified: ['Thu, 08 Feb 2018 18:09:58 GMT'] + date: ['Tue, 01 May 2018 21:45:47 GMT'] + etag: ['"0x8D5AFACE5FE617E"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -297,40 +310,42 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['413'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:47 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - etag: ['"0x8D56F1F2AA0D121"'] - last-modified: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:47 GMT'] + etag: ['"0x8D5AFACE6327329"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:47 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Z"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - etag: ['"0x8D56F1F2AA0D121"'] - last-modified: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:47 GMT'] + etag: ['"0x8D5AFACE6327329"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -339,140 +354,147 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['591'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:47 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - etag: ['"0x8D56F1F2AC8FA15"'] - last-modified: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:47 GMT'] + etag: ['"0x8D5AFACE6713515"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:47 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - etag: ['"0x8D56F1F2AC8FA15"'] - last-modified: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] + etag: ['"0x8D5AFACE6713515"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:48 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - etag: ['"0x8D56F1F2AC8FA15"'] - last-modified: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] + etag: ['"0x8D5AFACE6713515"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:48 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - etag: ['"0x8D56F1F2AC8FA15"'] - last-modified: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] + etag: ['"0x8D5AFACE6713515"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:00 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - etag: ['"0x8D56F1F2AC8FA15"'] - last-modified: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] + etag: ['"0x8D5AFACE6713515"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:00 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:00 GMT'] - etag: ['"0x8D56F1F2AC8FA15"'] - last-modified: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] + etag: ['"0x8D5AFACE6713515"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:00 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:00 GMT'] - etag: ['"0x8D56F1F2AC8FA15"'] - last-modified: ['Thu, 08 Feb 2018 18:09:59 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] + etag: ['"0x8D5AFACE6713515"'] + last-modified: ['Tue, 01 May 2018 21:45:47 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -481,60 +503,63 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['597'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:00 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:01 GMT'] - etag: ['"0x8D56F1F2BC2CB00"'] - last-modified: ['Thu, 08 Feb 2018 18:10:01 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] + etag: ['"0x8D5AFACE7BF9BF0"'] + last-modified: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:01 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:50 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1rtest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:01 GMT'] - etag: ['"0x8D56F1F2BC2CB00"'] - last-modified: ['Thu, 08 Feb 2018 18:10:01 GMT'] + date: ['Tue, 01 May 2018 21:45:50 GMT'] + etag: ['"0x8D5AFACE7BF9BF0"'] + last-modified: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:01 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:50 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest1rtest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:00 GMT'] - etag: ['"0x8D56F1F2BC2CB00"'] - last-modified: ['Thu, 08 Feb 2018 18:10:01 GMT'] + date: ['Tue, 01 May 2018 21:45:50 GMT'] + etag: ['"0x8D5AFACE7BF9BF0"'] + last-modified: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -543,40 +568,42 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['491'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:01 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:50 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:00 GMT'] - etag: ['"0x8D56F1F2C1343FC"'] - last-modified: ['Thu, 08 Feb 2018 18:10:01 GMT'] + date: ['Tue, 01 May 2018 21:45:50 GMT'] + etag: ['"0x8D5AFACE83D1FCD"'] + last-modified: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:01 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:51 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/cont000003?restype=container&comp=acl response: body: {string: "\uFEFFtest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:01 GMT'] - etag: ['"0x8D56F1F2C1343FC"'] - last-modified: ['Thu, 08 Feb 2018 18:10:01 GMT'] + date: ['Tue, 01 May 2018 21:45:50 GMT'] + etag: ['"0x8D5AFACE83D1FCD"'] + last-modified: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null @@ -588,8 +615,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -598,11 +625,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:03 GMT'] + date: ['Tue, 01 May 2018 21:45:51 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdSU0NFQzc2WU5BTzJQNFVGUFRQNU1PVVVENzNJUFRVNkpZTXwxQzlEQjczNzFBRDU1ODFELVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdJNVUyRldCUFFJNktDNllPMk9EWVNHRzJaSEtEN0hURVlTQ3xDMDZDRjhCODZGRTE2QzRFLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1191'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_cors_scenario.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_cors_scenario.yaml index 21f13f6d8ef..2ae36375192 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_cors_scenario.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_cors_scenario.yaml @@ -1,43 +1,45 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "eastus2", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T23:41:14Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['111'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"eastus2","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T23:41:14Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['385'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:38 GMT'] + date: ['Tue, 01 May 2018 23:41:16 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1189'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 201, message: Created} - request: - body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", + body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "eastus2", "properties": {"supportsHttpsTrafficOnly": false}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [storage account create] Connection: [keep-alive] - Content-Length: ['125'] + Content-Length: ['126'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:39 GMT'] + date: ['Tue, 01 May 2018 23:41:17 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a6dc502e-7696-4dbe-a9ef-d0e888461326?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/eastus2/asyncoperations/0bd47cbe-aad5-4127-bd83-2d324c4114ec?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1178'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a6dc502e-7696-4dbe-a9ef-d0e888461326?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/eastus2/asyncoperations/0bd47cbe-aad5-4127-bd83-2d324c4114ec?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:57 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a6dc502e-7696-4dbe-a9ef-d0e888461326?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/a6dc502e-7696-4dbe-a9ef-d0e888461326?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:39.8672416Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:39.8672416Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:09:39.8047876Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"eastus2","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T23:41:18.5011159Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T23:41:18.5011159Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T23:41:18.4229399Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"eastus2","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] - content-length: ['1231'] + content-length: ['1233'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:13 GMT'] + date: ['Tue, 01 May 2018 23:41:35 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"fUCEtNowYlfvLI6DZP3F0VdcVCD3VIea0d+c5hS5REi510SubTalfMysl5BAUeOlGahl33Ic4WDJcncutDJkZA==","permissions":"FULL"},{"keyName":"key2","value":"ZNUhM80FIWzo9jyGMRKJIhUHYeWlJvqNzQN4qDDCzMzooWkhSgdOBvX2hmK2k4R0sVb4Urz6xKaX2lQAQ3OpjA==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"HU0B1htVX7z5kftKvW2TmA6EX+E2Mhl8cGPG9HK1YU+tk1GfQoXsMZ9wZjTangh0ZhBTPvIq1yp2KcHqa/g3sA==","permissions":"FULL"},{"keyName":"key2","value":"skIKw3viQeZb+jr/4GGAivbeUVu+0atWwiPCICU4TZ1Y52ScQmheJpYNQwdMHjiqm6kYm/IbjKxc/95sCWwoeA==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:16 GMT'] + date: ['Tue, 01 May 2018 23:41:36 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -151,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"fUCEtNowYlfvLI6DZP3F0VdcVCD3VIea0d+c5hS5REi510SubTalfMysl5BAUeOlGahl33Ic4WDJcncutDJkZA==","permissions":"FULL"},{"keyName":"key2","value":"ZNUhM80FIWzo9jyGMRKJIhUHYeWlJvqNzQN4qDDCzMzooWkhSgdOBvX2hmK2k4R0sVb4Urz6xKaX2lQAQ3OpjA==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"HU0B1htVX7z5kftKvW2TmA6EX+E2Mhl8cGPG9HK1YU+tk1GfQoXsMZ9wZjTangh0ZhBTPvIq1yp2KcHqa/g3sA==","permissions":"FULL"},{"keyName":"key2","value":"skIKw3viQeZb+jr/4GGAivbeUVu+0atWwiPCICU4TZ1Y52ScQmheJpYNQwdMHjiqm6kYm/IbjKxc/95sCWwoeA==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:19 GMT'] + date: ['Tue, 01 May 2018 23:41:37 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -169,26 +147,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1185'] - status: {code: 200, message: OK} -- request: - body: null - headers: - Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:19 GMT'] - x-ms-version: ['2017-07-29'] - method: GET - uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties - response: - body: {string: "\uFEFF1.0truetruetrue71.0falsefalse"} - headers: - content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:19 GMT'] - server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] - transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -196,8 +156,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:38 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/?restype=service&comp=properties @@ -206,7 +166,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + date: ['Tue, 01 May 2018 23:41:38 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -215,19 +175,19 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:38 GMT'] x-ms-version: ['2017-07-29'] method: GET - uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties response: - body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalse1.0truetruetrue71.0falsefalse"} headers: - cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] - server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:38 GMT'] + server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] status: {code: 200, message: OK} @@ -235,9 +195,10 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:20 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:39 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -245,17 +206,39 @@ interactions: \ />false"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + date: ['Tue, 01 May 2018 23:41:39 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:39 GMT'] + x-ms-version: ['2017-11-09'] + method: GET + uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + response: + body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalse"} + headers: + cache-control: [no-cache] + content-type: [application/xml] + date: ['Tue, 01 May 2018 23:41:39 GMT'] + server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + transfer-encoding: [chunked] + x-ms-version: ['2017-11-09'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Connection: [keep-alive] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:40 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties @@ -264,7 +247,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + date: ['Tue, 01 May 2018 23:41:39 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -277,15 +260,16 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['287'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:40 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + date: ['Tue, 01 May 2018 23:41:40 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -294,21 +278,21 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:40 GMT'] + x-ms-version: ['2017-11-09'] method: GET - uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalse"} + \ />false"} headers: - cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] - server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:40 GMT'] + server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -318,37 +302,40 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['287'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:41 GMT'] + x-ms-version: ['2017-11-09'] method: PUT - uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] - server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:41 GMT'] + server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:41 GMT'] + x-ms-version: ['2017-11-09'] method: GET - uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties response: body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalsefalse"} + \ />"} headers: + cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:41 GMT'] + server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -358,47 +345,28 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['287'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:41 GMT'] + x-ms-version: ['2017-11-09'] method: PUT - uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:42 GMT'] + server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} -- request: - body: null - headers: - Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:22 GMT'] - x-ms-version: ['2017-07-29'] - method: GET - uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties - response: - body: {string: "\uFEFF1.0truetruetrue71.0falsefalsePOSThttp://example.com60"} - headers: - content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] - server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] - transfer-encoding: [chunked] - vary: [Origin] - x-ms-version: ['2017-07-29'] - status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:42 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/?restype=service&comp=properties @@ -407,7 +375,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + date: ['Tue, 01 May 2018 23:41:42 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -416,19 +384,19 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:42 GMT'] x-ms-version: ['2017-07-29'] method: GET - uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties response: - body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalsePOSThttp://example.com1.0truetruetrue71.0falsefalsePOSThttp://example.com60"} headers: - cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] - server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:42 GMT'] + server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] vary: [Origin] x-ms-version: ['2017-07-29'] @@ -437,9 +405,10 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:22 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:43 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -447,11 +416,33 @@ interactions: \ />60false"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + date: ['Tue, 01 May 2018 23:41:42 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] vary: [Origin] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Connection: [keep-alive] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:43 GMT'] + x-ms-version: ['2017-11-09'] + method: GET + uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + response: + body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalsePOSThttp://example.com60"} + headers: + cache-control: [no-cache] + content-type: [application/xml] + date: ['Tue, 01 May 2018 23:41:43 GMT'] + server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + transfer-encoding: [chunked] + vary: [Origin] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -460,15 +451,16 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['100'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:44 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + date: ['Tue, 01 May 2018 23:41:44 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -480,46 +472,28 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['100'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:22 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:44 GMT'] + x-ms-version: ['2017-11-09'] method: PUT uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 23:41:44 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} -- request: - body: null - headers: - Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] - x-ms-version: ['2017-07-29'] - method: GET - uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties - response: - body: {string: "\uFEFF1.0truetruetrue71.0falsefalse"} - headers: - content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] - server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] - transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] - status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:45 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/?restype=service&comp=properties @@ -528,7 +502,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 23:41:45 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -537,30 +511,30 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:45 GMT'] x-ms-version: ['2017-07-29'] method: GET - uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties response: - body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalsePOSThttp://example.com60"} + body: {string: "\uFEFF1.0truetruetrue71.0falsefalse"} headers: - cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] - server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:46 GMT'] + server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - vary: [Origin] x-ms-version: ['2017-07-29'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:46 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -568,10 +542,32 @@ interactions: \ />false"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 23:41:45 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Connection: [keep-alive] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:46 GMT'] + x-ms-version: ['2017-11-09'] + method: GET + uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + response: + body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalsePOSThttp://example.com60"} + headers: + cache-control: [no-cache] + content-type: [application/xml] + date: ['Tue, 01 May 2018 23:41:46 GMT'] + server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + transfer-encoding: [chunked] + vary: [Origin] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: ' @@ -580,15 +576,16 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['100'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:46 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 23:41:46 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -600,18 +597,19 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['100'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:47 GMT'] + x-ms-version: ['2017-11-09'] method: PUT - uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:24 GMT'] - server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:47 GMT'] + server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} - request: body: ' @@ -620,46 +618,28 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['100'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:47 GMT'] + x-ms-version: ['2017-11-09'] method: PUT - uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:24 GMT'] - server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:48 GMT'] + server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] status: {code: 202, message: Accepted} -- request: - body: null - headers: - Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] - x-ms-version: ['2017-07-29'] - method: GET - uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties - response: - body: {string: "\uFEFF1.0truetruetrue71.0falsefalse"} - headers: - content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:24 GMT'] - server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] - transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] - status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:48 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/?restype=service&comp=properties @@ -668,7 +648,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + date: ['Tue, 01 May 2018 23:41:48 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -677,19 +657,19 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:48 GMT'] x-ms-version: ['2017-07-29'] method: GET - uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + uri: https://clitest000002.file.core.windows.net/?restype=service&comp=properties response: - body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalse1.0truetruetrue71.0falsefalse"} headers: - cache-control: [no-cache] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:24 GMT'] - server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + date: ['Tue, 01 May 2018 23:41:49 GMT'] + server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] status: {code: 200, message: OK} @@ -697,9 +677,10 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:25 GMT'] - x-ms-version: ['2017-07-29'] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:49 GMT'] + x-ms-version: ['2017-11-09'] method: GET uri: https://clitest000002.blob.core.windows.net/?restype=service&comp=properties response: @@ -707,10 +688,31 @@ interactions: \ />false"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + date: ['Tue, 01 May 2018 23:41:52 GMT'] server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-version: ['2017-07-29'] + x-ms-version: ['2017-11-09'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Connection: [keep-alive] + User-Agent: [Azure-Storage/1.2.0rc0-1.2.0rc0 (Python CPython 3.6.2; Windows + 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 23:41:52 GMT'] + x-ms-version: ['2017-11-09'] + method: GET + uri: https://clitest000002.queue.core.windows.net/?restype=service&comp=properties + response: + body: {string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue71.0falsefalse"} + headers: + cache-control: [no-cache] + content-type: [application/xml] + date: ['Tue, 01 May 2018 23:41:52 GMT'] + server: [Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0] + transfer-encoding: [chunked] + x-ms-version: ['2017-11-09'] status: {code: 200, message: OK} - request: body: null @@ -722,8 +724,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -732,11 +734,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + date: ['Tue, 01 May 2018 23:41:54 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdOWDdUVURRVzJNTkVOVDZMVldKWVVQRjM2WFNCWTdIUzJCT3xENjY1ODM0ODkwMjE3NTVFLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdTQklaRUlNUE83RENONEFDNDJXTFdGWURRRjdJN0tMWUFBN3w1NUE2MUJFMDIyRDlDMzlGLUVBU1RVUzIiLCJqb2JMb2NhdGlvbiI6ImVhc3R1czIifQ?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_create_default_sku.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_create_default_sku.yaml index 07e62d6262a..201fb0fd303 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_create_default_sku.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_create_default_sku.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "southcentralus", "tags": {"use": "az-test"}}' + body: '{"location": "southcentralus", "tags": {"product": "azurecli", "cause": + "automation", "date": "2018-05-01T21:51:22Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['58'] + Content-Length: ['118'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:51:22Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['336'] + content-length: ['392'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:15:07 GMT'] + date: ['Tue, 01 May 2018 21:51:23 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1184'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1193'] status: {code: 201, message: Created} - request: body: null @@ -35,22 +37,23 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:51:22Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['336'] + content-length: ['392'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:15:08 GMT'] + date: ['Tue, 01 May 2018 21:51:23 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] vary: [Accept-Encoding] + x-content-type-options: [nosniff] status: {code: 200, message: OK} - request: body: '{"sku": {"name": "Standard_RAGRS"}, "kind": "Storage", "location": "southcentralus", @@ -63,7 +66,7 @@ interactions: Content-Length: ['135'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 @@ -73,14 +76,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:15:09 GMT'] + date: ['Tue, 01 May 2018 21:51:24 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/6a4d5822-012b-4c17-9a8f-3fe96dc6b00f?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/2ea9ca23-94ff-470b-849f-ecad61d99f0b?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1179'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1194'] status: {code: 202, message: Accepted} - request: body: null @@ -91,17 +95,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/6a4d5822-012b-4c17-9a8f-3fe96dc6b00f?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/2ea9ca23-94ff-470b-849f-ecad61d99f0b?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:15:09.0610322Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:15:09.0610322Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:15:08.9985152Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available","secondaryLocation":"northcentralus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://cli000002-secondary.blob.core.windows.net/","queue":"https://cli000002-secondary.queue.core.windows.net/","table":"https://cli000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:51:25.4792706Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:51:25.4792706Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:51:25.4167294Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available","secondaryLocation":"northcentralus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://cli000002-secondary.blob.core.windows.net/","queue":"https://cli000002-secondary.queue.core.windows.net/","table":"https://cli000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1570'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:15:27 GMT'] + date: ['Tue, 01 May 2018 21:51:42 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -109,6 +113,7 @@ interactions: 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: null @@ -120,8 +125,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -130,11 +135,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:15:28 GMT'] + date: ['Tue, 01 May 2018 21:51:44 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdLUkdEWUQ3R001TzJHUjUzM0hETlE1WVBDTTY2R1BJWFNSRHxGOEIyQjBGM0JDQzJBMDE3LVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdQRjMyTEJTM0NFUkNYWDdFQ0JNQzNCUDUzUlhOVlZVSU1QS3xFMkUwRDI5MTU2QzA0REZDLVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1179'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_file_copy_scenario.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_file_copy_scenario.yaml index 4df92b63dcf..b828a3ebf37 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_file_copy_scenario.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_file_copy_scenario.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:45:26Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:45:26Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:38 GMT'] + date: ['Tue, 01 May 2018 21:45:27 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1181'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:41 GMT'] + date: ['Tue, 01 May 2018 21:45:29 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/99c50eea-5352-4c61-8ebe-eaedc669708e?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/bd2cb830-881a-4637-84c2-2e384c7ef451?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1178'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/99c50eea-5352-4c61-8ebe-eaedc669708e?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/bd2cb830-881a-4637-84c2-2e384c7ef451?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:58 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/99c50eea-5352-4c61-8ebe-eaedc669708e?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/99c50eea-5352-4c61-8ebe-eaedc669708e?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:41.2578466Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:41.2578466Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:09:41.1953447Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:29.0276324Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:29.0276324Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:28.8244943Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:15 GMT'] + date: ['Tue, 01 May 2018 21:45:45 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"W0biWroI5505hXXb8mMTaxni5qLg1As8NFyD+i+W9xGUKLXpFtbkHXkfLBrXWcY1idHQz7S8MUqFgmziXwqvaw==","permissions":"FULL"},{"keyName":"key2","value":"7yIlMPQLXNoOdNKnWYk26GIRMYREqzuIMtg9KDGcGsYHXPBb+c7zoiiEXNI7M2d4mjkuancVJ27R9KC3X31Isw==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"Fe/E096AuLFd1EMAzXijduK7WC7HM5k9eYCc7NZmuVXiKf7rFZsetSlek46eL/VTxUG8AKWswK4KJfqPTtg1Nw==","permissions":"FULL"},{"keyName":"key2","value":"1p6p85c4Jtt7vU+I4URMjrWQtY3WWDWygLomej1cm/Yj43mdfwIZAUGtgv203IDvusAHe9dvsxSwxD8fUKcS8A==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:17 GMT'] + date: ['Tue, 01 May 2018 21:45:47 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1192'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null @@ -151,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"W0biWroI5505hXXb8mMTaxni5qLg1As8NFyD+i+W9xGUKLXpFtbkHXkfLBrXWcY1idHQz7S8MUqFgmziXwqvaw==","permissions":"FULL"},{"keyName":"key2","value":"7yIlMPQLXNoOdNKnWYk26GIRMYREqzuIMtg9KDGcGsYHXPBb+c7zoiiEXNI7M2d4mjkuancVJ27R9KC3X31Isw==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"Fe/E096AuLFd1EMAzXijduK7WC7HM5k9eYCc7NZmuVXiKf7rFZsetSlek46eL/VTxUG8AKWswK4KJfqPTtg1Nw==","permissions":"FULL"},{"keyName":"key2","value":"1p6p85c4Jtt7vU+I4URMjrWQtY3WWDWygLomej1cm/Yj43mdfwIZAUGtgv203IDvusAHe9dvsxSwxD8fUKcS8A==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:18 GMT'] + date: ['Tue, 01 May 2018 21:45:47 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -169,24 +147,26 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:19 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:48 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:19 GMT'] - etag: ['"0x8D56F1F36B66BCF"'] - last-modified: ['Thu, 08 Feb 2018 18:10:19 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] + etag: ['"0x8D5AFACE725A5B2"'] + last-modified: ['Tue, 01 May 2018 21:45:49 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -196,17 +176,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:19 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000004?restype=share response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:19 GMT'] - etag: ['"0x8D56F1F36EFF278"'] - last-modified: ['Thu, 08 Feb 2018 18:10:19 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] + etag: ['"0x8D5AFACE7628DDA"'] + last-modified: ['Tue, 01 May 2018 21:45:49 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -216,17 +197,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:19 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003/dir1?restype=directory response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:19 GMT'] - etag: ['"0x8D56F1F3721AC0F"'] - last-modified: ['Thu, 08 Feb 2018 18:10:20 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] + etag: ['"0x8D5AFACE79417FC"'] + last-modified: ['Tue, 01 May 2018 21:45:49 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -237,17 +219,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:49 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000004/dir2?restype=directory response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] - etag: ['"0x8D56F1F37694DBE"'] - last-modified: ['Thu, 08 Feb 2018 18:10:20 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] + etag: ['"0x8D5AFACE7DACAC5"'] + last-modified: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -258,9 +241,10 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] x-ms-content-length: ['524288'] - x-ms-date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + x-ms-date: ['Tue, 01 May 2018 21:45:50 GMT'] x-ms-type: [file] x-ms-version: ['2017-07-29'] method: PUT @@ -268,9 +252,9 @@ interactions: response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - etag: ['"0x8D56F1F37C42E0F"'] - last-modified: ['Thu, 08 Feb 2018 18:10:21 GMT'] + date: ['Tue, 01 May 2018 21:45:50 GMT'] + etag: ['"0x8D5AFACE8372C55"'] + last-modified: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -282,8 +266,9 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['524288'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:50 GMT'] x-ms-range: [bytes=0-524287] x-ms-version: ['2017-07-29'] x-ms-write: [update] @@ -293,9 +278,9 @@ interactions: body: {string: ''} headers: content-md5: [WQcVkAmdId1DmJZZIzi/lQ==] - date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - etag: ['"0x8D56F1F37E06F86"'] - last-modified: ['Thu, 08 Feb 2018 18:10:21 GMT'] + date: ['Tue, 01 May 2018 21:45:50 GMT'] + etag: ['"0x8D5AFACE8523356"'] + last-modified: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -305,8 +290,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:51 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000003/dir1/source_file.txt @@ -315,9 +301,9 @@ interactions: headers: content-length: ['524288'] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - etag: ['"0x8D56F1F37E06F86"'] - last-modified: ['Thu, 08 Feb 2018 18:10:21 GMT'] + date: ['Tue, 01 May 2018 21:45:50 GMT'] + etag: ['"0x8D5AFACE8523356"'] + last-modified: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-server-encrypted: ['true'] x-ms-type: [File] @@ -328,21 +314,22 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-copy-source: ['https://clitest4cpdiwczs2jeateqh.file.core.windows.net/shares3a3ymchzo5w7kwc25n/dir1/source_file.txt'] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-copy-source: ['https://clitestmkl7mkwejyngxmxpm.file.core.windows.net/shareyna7cyahtxr2rinh26g/dir1/source_file.txt'] + x-ms-date: ['Tue, 01 May 2018 21:45:51 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000004/dir2/destination_file.txt response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] - etag: ['"0x8D56F1F38EE028A"'] - last-modified: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:45:52 GMT'] + etag: ['"0x8D5AFACE920F344"'] + last-modified: ['Tue, 01 May 2018 21:45:52 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-copy-id: [9191a902-f4c4-4771-81c3-1ef7dfc4fecf] + x-ms-copy-id: [601d8f07-18e3-4b8c-b460-532a978f41e0] x-ms-copy-status: [success] x-ms-version: ['2017-07-29'] status: {code: 202, message: Accepted} @@ -350,8 +337,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:52 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000004/dir2/destination_file.txt @@ -360,14 +348,14 @@ interactions: headers: content-length: ['524288'] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] - etag: ['"0x8D56F1F38EE028A"'] - last-modified: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:45:52 GMT'] + etag: ['"0x8D5AFACE920F344"'] + last-modified: ['Tue, 01 May 2018 21:45:52 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] - x-ms-copy-completion-time: ['Thu, 08 Feb 2018 18:10:23 GMT'] - x-ms-copy-id: [9191a902-f4c4-4771-81c3-1ef7dfc4fecf] + x-ms-copy-completion-time: ['Tue, 01 May 2018 21:45:52 GMT'] + x-ms-copy-id: [601d8f07-18e3-4b8c-b460-532a978f41e0] x-ms-copy-progress: [524288/524288] - x-ms-copy-source: ['https://clitest4cpdiwczs2jeateqh.file.core.windows.net/shares3a3ymchzo5w7kwc25n/dir1/source_file.txt'] + x-ms-copy-source: ['https://clitestmkl7mkwejyngxmxpm.file.core.windows.net/shareyna7cyahtxr2rinh26g/dir1/source_file.txt'] x-ms-copy-status: [success] x-ms-server-encrypted: ['true'] x-ms-type: [File] @@ -378,21 +366,22 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-copy-source: ['https://clitest4cpdiwczs2jeateqh.file.core.windows.net/shares3a3ymchzo5w7kwc25n/dir1/source_file.txt'] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-copy-source: ['https://clitestmkl7mkwejyngxmxpm.file.core.windows.net/shareyna7cyahtxr2rinh26g/dir1/source_file.txt'] + x-ms-date: ['Tue, 01 May 2018 21:45:52 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000004/dir2/destination_file.txt response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] - etag: ['"0x8D56F1F39623D6C"'] - last-modified: ['Thu, 08 Feb 2018 18:10:24 GMT'] + date: ['Tue, 01 May 2018 21:45:52 GMT'] + etag: ['"0x8D5AFACE994FFD7"'] + last-modified: ['Tue, 01 May 2018 21:45:53 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-copy-id: [c5902d54-4d29-4562-8164-894fdb0a8f47] + x-ms-copy-id: [827d179d-e3bd-4800-b313-7fb4140df5af] x-ms-copy-status: [success] x-ms-version: ['2017-07-29'] status: {code: 202, message: Accepted} @@ -400,8 +389,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:53 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000004/dir2/destination_file.txt @@ -410,14 +400,14 @@ interactions: headers: content-length: ['524288'] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] - etag: ['"0x8D56F1F39623D6C"'] - last-modified: ['Thu, 08 Feb 2018 18:10:24 GMT'] + date: ['Tue, 01 May 2018 21:45:52 GMT'] + etag: ['"0x8D5AFACE994FFD7"'] + last-modified: ['Tue, 01 May 2018 21:45:53 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] - x-ms-copy-completion-time: ['Thu, 08 Feb 2018 18:10:24 GMT'] - x-ms-copy-id: [c5902d54-4d29-4562-8164-894fdb0a8f47] + x-ms-copy-completion-time: ['Tue, 01 May 2018 21:45:53 GMT'] + x-ms-copy-id: [827d179d-e3bd-4800-b313-7fb4140df5af] x-ms-copy-progress: [524288/524288] - x-ms-copy-source: ['https://clitest4cpdiwczs2jeateqh.file.core.windows.net/shares3a3ymchzo5w7kwc25n/dir1/source_file.txt'] + x-ms-copy-source: ['https://clitestmkl7mkwejyngxmxpm.file.core.windows.net/shareyna7cyahtxr2rinh26g/dir1/source_file.txt'] x-ms-copy-status: [success] x-ms-server-encrypted: ['true'] x-ms-type: [File] @@ -428,21 +418,22 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-copy-source: ['https://clitest4cpdiwczs2jeateqh.file.core.windows.net/shares3a3ymchzo5w7kwc25n/dir1%5Csource_file.txt'] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-copy-source: ['https://clitestmkl7mkwejyngxmxpm.file.core.windows.net/shareyna7cyahtxr2rinh26g/dir1%5Csource_file.txt'] + x-ms-date: ['Tue, 01 May 2018 21:45:53 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000004/dir2/destination_file.txt response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:24 GMT'] - etag: ['"0x8D56F1F39BD44D6"'] - last-modified: ['Thu, 08 Feb 2018 18:10:24 GMT'] + date: ['Tue, 01 May 2018 21:45:53 GMT'] + etag: ['"0x8D5AFACE9F580DF"'] + last-modified: ['Tue, 01 May 2018 21:45:53 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] - x-ms-copy-id: [90c5d15c-c4ed-4d9a-9a8f-3f3edcf567a6] + x-ms-copy-id: [f684c650-cf44-4956-82ce-5db74c2bf490] x-ms-copy-status: [success] x-ms-version: ['2017-07-29'] status: {code: 202, message: Accepted} @@ -456,8 +447,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -466,11 +457,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + date: ['Tue, 01 May 2018 21:45:54 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdBVzZRSFFOM1hTWE8yNU1WNENKNkxLSE9LWktKTUtSVVlIQ3w2Mzg4MzgxQUJENEE0MjgxLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdWWFpVVUkzUU5ZQjNaQUI1VklWN0E2QlhHSU1YWjRLNElaNHwwMjFGMUNBNjk4NkE2RUQ1LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1189'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_file_main_scenario.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_file_main_scenario.yaml index 3c1dcfb8bc5..71f184bd169 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_file_main_scenario.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_file_main_scenario.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:45:54Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:45:54Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + date: ['Tue, 01 May 2018 21:45:54 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1188'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + date: ['Tue, 01 May 2018 21:45:55 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/c4539dfb-2da8-46b3-97d4-99e3936b829c?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/f3763a77-bcd8-4c3d-a7ee-d5f877796408?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1181'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} - request: body: null @@ -65,44 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/c4539dfb-2da8-46b3-97d4-99e3936b829c?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/f3763a77-bcd8-4c3d-a7ee-d5f877796408?monitor=true&api-version=2017-10-01 response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:45 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/c4539dfb-2da8-46b3-97d4-99e3936b829c?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/c4539dfb-2da8-46b3-97d4-99e3936b829c?monitor=true&api-version=2017-10-01 - response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:27.8047087Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:27.8047087Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:27.7578007Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:56.3092305Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:56.3092305Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:56.1373257Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:11:02 GMT'] + date: ['Tue, 01 May 2018 21:46:12 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"2KAvzS5kuzqep2D/vqmnQma+Uh2BYniNyaF/aHHH9mfehkvNSysCRoovtOEjCj/oN80O1QHqJcQWprZPWTFPYA==","permissions":"FULL"},{"keyName":"key2","value":"zMHodo4tnGVmUSUtJelsPikjdNVF/FajrSN1pC/DvCrkCGQC7M+Ra+5oUnxurjrQDGq581ep3UnClECLAgB5oQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"Krg2dym2VgbL8W0f3/h6/tf/fDpW8KTtXFkWoajTbzwiBXnIJ88JzZQpMPqCYArRBwkS3nY9L1qGd38HYmXVgA==","permissions":"FULL"},{"keyName":"key2","value":"tmqcWdPZpw6i9kSzsejkceWBJVBuvQ41DkojSGq8q8GO2ns2oMTIHe373wyVxydtioX1yZa3q/thL+6RnG85Ow==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:11:03 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -151,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"2KAvzS5kuzqep2D/vqmnQma+Uh2BYniNyaF/aHHH9mfehkvNSysCRoovtOEjCj/oN80O1QHqJcQWprZPWTFPYA==","permissions":"FULL"},{"keyName":"key2","value":"zMHodo4tnGVmUSUtJelsPikjdNVF/FajrSN1pC/DvCrkCGQC7M+Ra+5oUnxurjrQDGq581ep3UnClECLAgB5oQ==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"Krg2dym2VgbL8W0f3/h6/tf/fDpW8KTtXFkWoajTbzwiBXnIJ88JzZQpMPqCYArRBwkS3nY9L1qGd38HYmXVgA==","permissions":"FULL"},{"keyName":"key2","value":"tmqcWdPZpw6i9kSzsejkceWBJVBuvQ41DkojSGq8q8GO2ns2oMTIHe373wyVxydtioX1yZa3q/thL+6RnG85Ow==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:11:04 GMT'] + date: ['Tue, 01 May 2018 21:46:15 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -169,24 +147,26 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:04 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:15 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:03 GMT'] - etag: ['"0x8D56F1F5193A40A"'] - last-modified: ['Thu, 08 Feb 2018 18:11:04 GMT'] + date: ['Tue, 01 May 2018 21:46:15 GMT'] + etag: ['"0x8D5AFACF735FDAA"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -196,8 +176,9 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:04 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:16 GMT'] x-ms-meta-cat: [hat] x-ms-meta-foo: [bar] x-ms-version: ['2017-07-29'] @@ -206,9 +187,9 @@ interactions: response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:04 GMT'] - etag: ['"0x8D56F1F51CD4B42"'] - last-modified: ['Thu, 08 Feb 2018 18:11:04 GMT'] + date: ['Tue, 01 May 2018 21:46:15 GMT'] + etag: ['"0x8D5AFACF76CBAB9"'] + last-modified: ['Tue, 01 May 2018 21:46:16 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -217,17 +198,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:05 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:16 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:05 GMT'] - etag: ['"0x8D56F1F5193A40A"'] - last-modified: ['Thu, 08 Feb 2018 18:11:04 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] + etag: ['"0x8D5AFACF735FDAA"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-share-quota: ['5120'] @@ -237,17 +219,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:05 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:16 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000004?restype=share&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:04 GMT'] - etag: ['"0x8D56F1F51CD4B42"'] - last-modified: ['Thu, 08 Feb 2018 18:11:04 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] + etag: ['"0x8D5AFACF76CBAB9"'] + last-modified: ['Tue, 01 May 2018 21:46:16 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-meta-cat: [hat] @@ -258,20 +241,21 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:05 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:17 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/?comp=list response: body: {string: "\uFEFFshare000004Thu,\ - \ 08 Feb 2018 18:11:04 GMT\"0x8D56F1F51CD4B42\"5120share000003Thu,\ - \ 08 Feb 2018 18:11:04 GMT\"0x8D56F1F5193A40A\"5120share000004Tue,\ + \ 01 May 2018 21:46:16 GMT\"0x8D5AFACF76CBAB9\"5120share000003Tue,\ + \ 01 May 2018 21:46:15 GMT\"0x8D5AFACF735FDAA\"5120"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:11:05 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -281,8 +265,9 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:05 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:17 GMT'] x-ms-meta-a: [b] x-ms-meta-c: [d] x-ms-version: ['2017-07-29'] @@ -291,9 +276,9 @@ interactions: response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:05 GMT'] - etag: ['"0x8D56F1F52778D4E"'] - last-modified: ['Thu, 08 Feb 2018 18:11:06 GMT'] + date: ['Tue, 01 May 2018 21:46:17 GMT'] + etag: ['"0x8D5AFACF851B80F"'] + last-modified: ['Tue, 01 May 2018 21:46:17 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -302,17 +287,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:06 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:18 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:06 GMT'] - etag: ['"0x8D56F1F52778D4E"'] - last-modified: ['Thu, 08 Feb 2018 18:11:06 GMT'] + date: ['Tue, 01 May 2018 21:46:17 GMT'] + etag: ['"0x8D5AFACF851B80F"'] + last-modified: ['Tue, 01 May 2018 21:46:17 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-meta-a: [b] @@ -324,17 +310,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:06 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:18 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:06 GMT'] - etag: ['"0x8D56F1F52D7720B"'] - last-modified: ['Thu, 08 Feb 2018 18:11:06 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] + etag: ['"0x8D5AFACF8C7EF15"'] + last-modified: ['Tue, 01 May 2018 21:46:18 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -343,17 +330,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:06 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:18 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:06 GMT'] - etag: ['"0x8D56F1F52D7720B"'] - last-modified: ['Thu, 08 Feb 2018 18:11:06 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] + etag: ['"0x8D5AFACF8C7EF15"'] + last-modified: ['Tue, 01 May 2018 21:46:18 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -363,8 +351,9 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:07 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:19 GMT'] x-ms-share-quota: ['3'] x-ms-version: ['2017-07-29'] method: PUT @@ -372,9 +361,9 @@ interactions: response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:06 GMT'] - etag: ['"0x8D56F1F53313B2B"'] - last-modified: ['Thu, 08 Feb 2018 18:11:07 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] + etag: ['"0x8D5AFACF931A01C"'] + last-modified: ['Tue, 01 May 2018 21:46:19 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -383,17 +372,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:07 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:19 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:07 GMT'] - etag: ['"0x8D56F1F53313B2B"'] - last-modified: ['Thu, 08 Feb 2018 18:11:07 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] + etag: ['"0x8D5AFACF931A01C"'] + last-modified: ['Tue, 01 May 2018 21:46:19 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-share-quota: ['3'] @@ -404,9 +394,10 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] x-ms-content-length: ['131072'] - x-ms-date: ['Thu, 08 Feb 2018 18:11:07 GMT'] + x-ms-date: ['Tue, 01 May 2018 21:46:19 GMT'] x-ms-type: [file] x-ms-version: ['2017-07-29'] method: PUT @@ -414,9 +405,9 @@ interactions: response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:07 GMT'] - etag: ['"0x8D56F1F53A66DAB"'] - last-modified: ['Thu, 08 Feb 2018 18:11:08 GMT'] + date: ['Tue, 01 May 2018 21:46:19 GMT'] + etag: ['"0x8D5AFACF9C0746C"'] + last-modified: ['Tue, 01 May 2018 21:46:20 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -3876,8 +3867,9 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['131072'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:08 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:20 GMT'] x-ms-range: [bytes=0-131071] x-ms-version: ['2017-07-29'] x-ms-write: [update] @@ -3887,9 +3879,9 @@ interactions: body: {string: ''} headers: content-md5: [DfvoqkwgtS4bi/PLbL3xkw==] - date: ['Thu, 08 Feb 2018 18:11:08 GMT'] - etag: ['"0x8D56F1F53BF0368"'] - last-modified: ['Thu, 08 Feb 2018 18:11:08 GMT'] + date: ['Tue, 01 May 2018 21:46:19 GMT'] + etag: ['"0x8D5AFACF9D9F5F5"'] + last-modified: ['Tue, 01 May 2018 21:46:20 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -3899,8 +3891,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:08 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:20 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin @@ -3909,9 +3902,9 @@ interactions: headers: content-length: ['131072'] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:11:08 GMT'] - etag: ['"0x8D56F1F53BF0368"'] - last-modified: ['Thu, 08 Feb 2018 18:11:08 GMT'] + date: ['Tue, 01 May 2018 21:46:19 GMT'] + etag: ['"0x8D5AFACF9D9F5F5"'] + last-modified: ['Tue, 01 May 2018 21:46:20 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-server-encrypted: ['true'] x-ms-type: [File] @@ -3921,8 +3914,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:08 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:20 GMT'] x-ms-range: [bytes=0-33554431] x-ms-version: ['2017-07-29'] method: GET @@ -7476,9 +7470,9 @@ interactions: content-length: ['131072'] content-range: [bytes 0-131071/131072] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:11:07 GMT'] - etag: ['"0x8D56F1F53BF0368"'] - last-modified: ['Thu, 08 Feb 2018 18:11:08 GMT'] + date: ['Tue, 01 May 2018 21:46:20 GMT'] + etag: ['"0x8D5AFACF9D9F5F5"'] + last-modified: ['Tue, 01 May 2018 21:46:20 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-server-encrypted: ['true'] x-ms-type: [File] @@ -7488,8 +7482,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:09 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:21 GMT'] x-ms-range: [bytes=0-511] x-ms-version: ['2017-07-29'] method: GET @@ -7514,9 +7509,9 @@ interactions: content-length: ['512'] content-range: [bytes 0-511/131072] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:11:08 GMT'] - etag: ['"0x8D56F1F53BF0368"'] - last-modified: ['Thu, 08 Feb 2018 18:11:08 GMT'] + date: ['Tue, 01 May 2018 21:46:20 GMT'] + etag: ['"0x8D5AFACF9D9F5F5"'] + last-modified: ['Tue, 01 May 2018 21:46:20 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-server-encrypted: ['true'] x-ms-type: [File] @@ -7527,18 +7522,19 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] x-ms-content-length: ['1234'] - x-ms-date: ['Thu, 08 Feb 2018 18:11:09 GMT'] + x-ms-date: ['Tue, 01 May 2018 21:46:21 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin?comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:10 GMT'] - etag: ['"0x8D56F1F55577DD0"'] - last-modified: ['Thu, 08 Feb 2018 18:11:10 GMT'] + date: ['Tue, 01 May 2018 21:46:20 GMT'] + etag: ['"0x8D5AFACFABE720B"'] + last-modified: ['Tue, 01 May 2018 21:46:21 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -7548,8 +7544,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:11 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:22 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin @@ -7558,9 +7555,9 @@ interactions: headers: content-length: ['1234'] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:11:10 GMT'] - etag: ['"0x8D56F1F55577DD0"'] - last-modified: ['Thu, 08 Feb 2018 18:11:10 GMT'] + date: ['Tue, 01 May 2018 21:46:21 GMT'] + etag: ['"0x8D5AFACFABE720B"'] + last-modified: ['Tue, 01 May 2018 21:46:21 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-server-encrypted: ['true'] x-ms-type: [File] @@ -7571,8 +7568,9 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:11 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:22 GMT'] x-ms-meta-a: [b] x-ms-meta-c: [d] x-ms-version: ['2017-07-29'] @@ -7581,9 +7579,9 @@ interactions: response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:11 GMT'] - etag: ['"0x8D56F1F55AF72CE"'] - last-modified: ['Thu, 08 Feb 2018 18:11:11 GMT'] + date: ['Tue, 01 May 2018 21:46:22 GMT'] + etag: ['"0x8D5AFACFB303ACC"'] + last-modified: ['Tue, 01 May 2018 21:46:22 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -7593,17 +7591,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:11 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:22 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin?comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:11 GMT'] - etag: ['"0x8D56F1F55AF72CE"'] - last-modified: ['Thu, 08 Feb 2018 18:11:11 GMT'] + date: ['Tue, 01 May 2018 21:46:22 GMT'] + etag: ['"0x8D5AFACFB303ACC"'] + last-modified: ['Tue, 01 May 2018 21:46:22 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-meta-a: [b] @@ -7615,17 +7614,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:11 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:23 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin?comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:11 GMT'] - etag: ['"0x8D56F1F56082AF4"'] - last-modified: ['Thu, 08 Feb 2018 18:11:12 GMT'] + date: ['Tue, 01 May 2018 21:46:22 GMT'] + etag: ['"0x8D5AFACFB9B4B36"'] + last-modified: ['Tue, 01 May 2018 21:46:23 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -7635,17 +7635,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:12 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:23 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin?comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:11 GMT'] - etag: ['"0x8D56F1F56082AF4"'] - last-modified: ['Thu, 08 Feb 2018 18:11:12 GMT'] + date: ['Tue, 01 May 2018 21:46:22 GMT'] + etag: ['"0x8D5AFACFB9B4B36"'] + last-modified: ['Tue, 01 May 2018 21:46:23 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -7654,8 +7655,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:12 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:23 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=directory&comp=list @@ -7666,7 +7668,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:11:11 GMT'] + date: ['Tue, 01 May 2018 21:46:23 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -7675,8 +7677,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:12 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:24 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin @@ -7685,9 +7688,9 @@ interactions: headers: content-length: ['1234'] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:11:13 GMT'] - etag: ['"0x8D56F1F56082AF4"'] - last-modified: ['Thu, 08 Feb 2018 18:11:12 GMT'] + date: ['Tue, 01 May 2018 21:46:23 GMT'] + etag: ['"0x8D5AFACFB9B4B36"'] + last-modified: ['Tue, 01 May 2018 21:46:23 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-server-encrypted: ['false'] x-ms-type: [File] @@ -7698,18 +7701,19 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] x-ms-content-type: [test/type] - x-ms-date: ['Thu, 08 Feb 2018 18:11:13 GMT'] + x-ms-date: ['Tue, 01 May 2018 21:46:24 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin?comp=properties response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:12 GMT'] - etag: ['"0x8D56F1F56BC0D00"'] - last-modified: ['Thu, 08 Feb 2018 18:11:13 GMT'] + date: ['Tue, 01 May 2018 21:46:23 GMT'] + etag: ['"0x8D5AFACFC8D3802"'] + last-modified: ['Tue, 01 May 2018 21:46:24 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -7719,8 +7723,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:13 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:25 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin @@ -7729,9 +7734,9 @@ interactions: headers: content-length: ['1234'] content-type: [test/type] - date: ['Thu, 08 Feb 2018 18:11:13 GMT'] - etag: ['"0x8D56F1F56BC0D00"'] - last-modified: ['Thu, 08 Feb 2018 18:11:13 GMT'] + date: ['Tue, 01 May 2018 21:46:24 GMT'] + etag: ['"0x8D5AFACFC8D3802"'] + last-modified: ['Tue, 01 May 2018 21:46:24 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-server-encrypted: ['false'] x-ms-type: [File] @@ -7742,15 +7747,16 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:13 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:25 GMT'] x-ms-version: ['2017-07-29'] method: DELETE uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:13 GMT'] + date: ['Tue, 01 May 2018 21:46:25 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -7759,15 +7765,16 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:13 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:25 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000003/sample_file.bin response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:14 GMT'] + date: ['Tue, 01 May 2018 21:46:25 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-error-code: [ResourceNotFound] @@ -7778,17 +7785,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:14 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:26 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003/dir000005?restype=directory response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:14 GMT'] - etag: ['"0x8D56F1F576A6FC7"'] - last-modified: ['Thu, 08 Feb 2018 18:11:14 GMT'] + date: ['Tue, 01 May 2018 21:46:26 GMT'] + etag: ['"0x8D5AFACFD6D463D"'] + last-modified: ['Tue, 01 May 2018 21:46:26 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -7798,8 +7806,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:14 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:26 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=directory&comp=list @@ -7810,7 +7819,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:11:14 GMT'] + date: ['Tue, 01 May 2018 21:46:26 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -7819,17 +7828,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:14 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:26 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003/dir000005?restype=directory response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:14 GMT'] - etag: ['"0x8D56F1F576A6FC7"'] - last-modified: ['Thu, 08 Feb 2018 18:11:14 GMT'] + date: ['Tue, 01 May 2018 21:46:27 GMT'] + etag: ['"0x8D5AFACFD6D463D"'] + last-modified: ['Tue, 01 May 2018 21:46:26 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-server-encrypted: ['true'] @@ -7840,8 +7850,9 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:15 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:27 GMT'] x-ms-meta-a: [b] x-ms-meta-c: [d] x-ms-version: ['2017-07-29'] @@ -7850,9 +7861,9 @@ interactions: response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:15 GMT'] - etag: ['"0x8D56F1F57E6E38F"'] - last-modified: ['Thu, 08 Feb 2018 18:11:15 GMT'] + date: ['Tue, 01 May 2018 21:46:26 GMT'] + etag: ['"0x8D5AFACFE0BCF00"'] + last-modified: ['Tue, 01 May 2018 21:46:27 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -7862,17 +7873,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:15 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:27 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003/dir000005?restype=directory&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:14 GMT'] - etag: ['"0x8D56F1F57E6E38F"'] - last-modified: ['Thu, 08 Feb 2018 18:11:15 GMT'] + date: ['Tue, 01 May 2018 21:46:27 GMT'] + etag: ['"0x8D5AFACFE0BCF00"'] + last-modified: ['Tue, 01 May 2018 21:46:27 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-meta-a: [b] @@ -7883,17 +7895,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:15 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:27 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003/dir000005?restype=directory response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:15 GMT'] - etag: ['"0x8D56F1F57E6E38F"'] - last-modified: ['Thu, 08 Feb 2018 18:11:15 GMT'] + date: ['Tue, 01 May 2018 21:46:27 GMT'] + etag: ['"0x8D5AFACFE0BCF00"'] + last-modified: ['Tue, 01 May 2018 21:46:27 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-meta-a: [b] @@ -7906,17 +7919,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:15 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:28 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003/dir000005?restype=directory&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:15 GMT'] - etag: ['"0x8D56F1F5862E20C"'] - last-modified: ['Thu, 08 Feb 2018 18:11:16 GMT'] + date: ['Tue, 01 May 2018 21:46:27 GMT'] + etag: ['"0x8D5AFACFEB5A51F"'] + last-modified: ['Tue, 01 May 2018 21:46:28 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -7926,17 +7940,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:16 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:28 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003/dir000005?restype=directory&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:15 GMT'] - etag: ['"0x8D56F1F5862E20C"'] - last-modified: ['Thu, 08 Feb 2018 18:11:16 GMT'] + date: ['Tue, 01 May 2018 21:46:28 GMT'] + etag: ['"0x8D5AFACFEB5A51F"'] + last-modified: ['Tue, 01 May 2018 21:46:28 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -7946,9 +7961,10 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] x-ms-content-length: ['65536'] - x-ms-date: ['Thu, 08 Feb 2018 18:11:16 GMT'] + x-ms-date: ['Tue, 01 May 2018 21:46:29 GMT'] x-ms-type: [file] x-ms-version: ['2017-07-29'] method: PUT @@ -7956,9 +7972,9 @@ interactions: response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:15 GMT'] - etag: ['"0x8D56F1F58BEF659"'] - last-modified: ['Thu, 08 Feb 2018 18:11:16 GMT'] + date: ['Tue, 01 May 2018 21:46:29 GMT'] + etag: ['"0x8D5AFACFF2CC653"'] + last-modified: ['Tue, 01 May 2018 21:46:29 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -9693,8 +9709,9 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['65536'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:16 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:29 GMT'] x-ms-range: [bytes=0-65535] x-ms-version: ['2017-07-29'] x-ms-write: [update] @@ -9704,9 +9721,9 @@ interactions: body: {string: ''} headers: content-md5: [/Na8tWwWifzvKLV8IkdbrQ==] - date: ['Thu, 08 Feb 2018 18:11:15 GMT'] - etag: ['"0x8D56F1F58CD9F2C"'] - last-modified: ['Thu, 08 Feb 2018 18:11:16 GMT'] + date: ['Tue, 01 May 2018 21:46:29 GMT'] + etag: ['"0x8D5AFACFF4164B0"'] + last-modified: ['Tue, 01 May 2018 21:46:29 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -9716,8 +9733,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:16 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:29 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000003/dir000005/testfile.txt @@ -9726,9 +9744,9 @@ interactions: headers: content-length: ['65536'] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:11:16 GMT'] - etag: ['"0x8D56F1F58CD9F2C"'] - last-modified: ['Thu, 08 Feb 2018 18:11:16 GMT'] + date: ['Tue, 01 May 2018 21:46:29 GMT'] + etag: ['"0x8D5AFACFF4164B0"'] + last-modified: ['Tue, 01 May 2018 21:46:29 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-server-encrypted: ['true'] x-ms-type: [File] @@ -9738,8 +9756,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:17 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:30 GMT'] x-ms-range: [bytes=0-33554431] x-ms-version: ['2017-07-29'] method: GET @@ -11522,9 +11541,9 @@ interactions: content-length: ['65536'] content-range: [bytes 0-65535/65536] content-type: [application/octet-stream] - date: ['Thu, 08 Feb 2018 18:11:17 GMT'] - etag: ['"0x8D56F1F58CD9F2C"'] - last-modified: ['Thu, 08 Feb 2018 18:11:16 GMT'] + date: ['Tue, 01 May 2018 21:46:30 GMT'] + etag: ['"0x8D5AFACFF4164B0"'] + last-modified: ['Tue, 01 May 2018 21:46:29 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-server-encrypted: ['true'] x-ms-type: [File] @@ -11534,8 +11553,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:17 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:30 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003/dir000005?restype=directory&comp=list @@ -11546,7 +11566,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:11:16 GMT'] + date: ['Tue, 01 May 2018 21:46:29 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -11555,8 +11575,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:17 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:30 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=stats @@ -11564,7 +11585,7 @@ interactions: body: {string: "\uFEFF1"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:11:17 GMT'] + date: ['Tue, 01 May 2018 21:46:30 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -11574,15 +11595,16 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:18 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:31 GMT'] x-ms-version: ['2017-07-29'] method: DELETE uri: https://clitest000002.file.core.windows.net/share000003/dir000005/testfile.txt response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:17 GMT'] + date: ['Tue, 01 May 2018 21:46:30 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -11591,15 +11613,16 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:18 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:31 GMT'] x-ms-version: ['2017-07-29'] method: HEAD uri: https://clitest000002.file.core.windows.net/share000003/testfile.txt response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:18 GMT'] + date: ['Tue, 01 May 2018 21:46:31 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-error-code: [ResourceNotFound] @@ -11610,15 +11633,16 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:18 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:31 GMT'] x-ms-version: ['2017-07-29'] method: DELETE uri: https://clitest000002.file.core.windows.net/share000003/dir000005?restype=directory response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:18 GMT'] + date: ['Tue, 01 May 2018 21:46:31 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -11627,19 +11651,20 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:18 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:32 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003/dir000005?restype=directory response: body: {string: "\uFEFFResourceNotFoundThe\ - \ specified resource does not exist.\nRequestId:781aa763-001a-00a1-6008-a14f24000000\n\ - Time:2018-02-08T18:11:19.0039587Z"} + \ specified resource does not exist.\nRequestId:1e9b357f-901a-000d-3f95-e1020e000000\n\ + Time:2018-05-01T21:46:32.5260555Z"} headers: content-length: ['223'] content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:11:18 GMT'] + date: ['Tue, 01 May 2018 21:46:32 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] x-ms-error-code: [ResourceNotFound] x-ms-version: ['2017-07-29'] @@ -11649,8 +11674,9 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:19 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:32 GMT'] x-ms-meta-cat: [hat] x-ms-meta-foo: [bar] x-ms-version: ['2017-07-29'] @@ -11659,9 +11685,9 @@ interactions: response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:18 GMT'] - etag: ['"0x8D56F1F5A4E956B"'] - last-modified: ['Thu, 08 Feb 2018 18:11:19 GMT'] + date: ['Tue, 01 May 2018 21:46:32 GMT'] + etag: ['"0x8D5AFAD014837F9"'] + last-modified: ['Tue, 01 May 2018 21:46:32 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-request-server-encrypted: ['true'] @@ -11671,17 +11697,18 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:19 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:33 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003/dir000006?restype=directory&comp=metadata response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:18 GMT'] - etag: ['"0x8D56F1F5A4E956B"'] - last-modified: ['Thu, 08 Feb 2018 18:11:19 GMT'] + date: ['Tue, 01 May 2018 21:46:33 GMT'] + etag: ['"0x8D5AFAD014837F9"'] + last-modified: ['Tue, 01 May 2018 21:46:32 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-meta-cat: [hat] @@ -11693,15 +11720,16 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:19 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:33 GMT'] x-ms-version: ['2017-07-29'] method: DELETE uri: https://clitest000002.file.core.windows.net/share000003/dir000006?restype=directory response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:19 GMT'] + date: ['Tue, 01 May 2018 21:46:33 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -11711,15 +11739,16 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:11:19 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:33 GMT'] x-ms-version: ['2017-07-29'] method: DELETE uri: https://clitest000002.file.core.windows.net/share000003?restype=share response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:11:19 GMT'] + date: ['Tue, 01 May 2018 21:46:33 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -11734,8 +11763,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -11744,11 +11773,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:11:20 GMT'] + date: ['Tue, 01 May 2018 21:46:33 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdPQ0pLSk0zR0tZVFZMSlBOU1FET1lSN0ZJQVlTWVJERU1JWXxDRjgyRTAwRDkxMzRBMzMwLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkc3R1JITEpCVENPN002VlNXSklBRkdPNVBDUFBUTTVIRkY2Mnw2OEE5RjAxMjgwRjg4QzczLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1178'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_share_acl_scenarios.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_share_acl_scenarios.yaml index 3961c7e0ae5..ab9378b455d 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_share_acl_scenarios.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_share_acl_scenarios.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:45:51Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:45:51Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:04 GMT'] + date: ['Tue, 01 May 2018 21:45:52 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1183'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['125'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,14 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:06 GMT'] + date: ['Tue, 01 May 2018 21:45:53 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b7b58b78-4abd-4f84-96ab-12b663cfd383?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/e7ddae0b-f4c9-4f86-b95d-6ffd48417905?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 202, message: Accepted} - request: body: null @@ -65,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/b7b58b78-4abd-4f84-96ab-12b663cfd383?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/e7ddae0b-f4c9-4f86-b95d-6ffd48417905?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:06.9633470Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:10:06.9633470Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:10:06.8851899Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:53.6685803Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:53.6685803Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:53.5904791Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1231'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:46:10 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -83,6 +86,7 @@ interactions: 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: null @@ -94,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"aCbbyFgmI7NqwcdyfSuSWIdoxyuXUvhagv4CfnXPOG896Qkm8achaQIvLIrBDLJdG4WBs2+UKHewLM+eIn1BUg==","permissions":"FULL"},{"keyName":"key2","value":"h4GQGCe0mQwwjE9SiZQ96foFUAsl8CmY9MWBDGJlDc4OeEnsNSL3HhGCCxdTOtrYtQs1H/hk7cZuadOypdmEWA==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"QUd54/Jo5bT7xAKNnZlsCbZz0A2QWVTVVhAEu1v8LTmoinvyvTfRWuIyEI2HEO5d/Ez0LX+m5Wn7ATgkoXSa5g==","permissions":"FULL"},{"keyName":"key2","value":"DykqlYU443lHJcsyaBgq19YOwsI3jav0fWuy4mkQ+b1FM1+pWVoUe+6fMDxqWL7Ya+FrwlvgikZL5LgevJb3GA==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + date: ['Tue, 01 May 2018 21:46:11 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -112,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1176'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null @@ -124,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"aCbbyFgmI7NqwcdyfSuSWIdoxyuXUvhagv4CfnXPOG896Qkm8achaQIvLIrBDLJdG4WBs2+UKHewLM+eIn1BUg==","permissions":"FULL"},{"keyName":"key2","value":"h4GQGCe0mQwwjE9SiZQ96foFUAsl8CmY9MWBDGJlDc4OeEnsNSL3HhGCCxdTOtrYtQs1H/hk7cZuadOypdmEWA==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"QUd54/Jo5bT7xAKNnZlsCbZz0A2QWVTVVhAEu1v8LTmoinvyvTfRWuIyEI2HEO5d/Ez0LX+m5Wn7ATgkoXSa5g==","permissions":"FULL"},{"keyName":"key2","value":"DykqlYU443lHJcsyaBgq19YOwsI3jav0fWuy4mkQ+b1FM1+pWVoUe+6fMDxqWL7Ya+FrwlvgikZL5LgevJb3GA==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + date: ['Tue, 01 May 2018 21:46:12 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -142,24 +147,26 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1189'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: null headers: Connection: [keep-alive] Content-Length: ['0'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:27 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:12 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:27 GMT'] - etag: ['"0x8D56F1F3BA62107"'] - last-modified: ['Thu, 08 Feb 2018 18:10:27 GMT'] + date: ['Tue, 01 May 2018 21:46:12 GMT'] + etag: ['"0x8D5AFACF594FBD5"'] + last-modified: ['Tue, 01 May 2018 21:46:13 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -168,8 +175,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:27 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:13 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -178,9 +186,9 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:27 GMT'] - etag: ['"0x8D56F1F3BA62107"'] - last-modified: ['Thu, 08 Feb 2018 18:10:27 GMT'] + date: ['Tue, 01 May 2018 21:46:13 GMT'] + etag: ['"0x8D5AFACF594FBD5"'] + last-modified: ['Tue, 01 May 2018 21:46:13 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -189,8 +197,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:13 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -199,9 +208,9 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:27 GMT'] - etag: ['"0x8D56F1F3BA62107"'] - last-modified: ['Thu, 08 Feb 2018 18:10:27 GMT'] + date: ['Tue, 01 May 2018 21:46:13 GMT'] + etag: ['"0x8D5AFACF594FBD5"'] + last-modified: ['Tue, 01 May 2018 21:46:13 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -213,17 +222,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['184'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:14 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:27 GMT'] - etag: ['"0x8D56F1F3C2BFFDE"'] - last-modified: ['Thu, 08 Feb 2018 18:10:28 GMT'] + date: ['Tue, 01 May 2018 21:46:13 GMT'] + etag: ['"0x8D5AFACF615BB26"'] + last-modified: ['Tue, 01 May 2018 21:46:14 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -232,8 +242,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:14 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -241,9 +252,9 @@ interactions: body: {string: "\uFEFFtest1l"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:28 GMT'] - etag: ['"0x8D56F1F3C2BFFDE"'] - last-modified: ['Thu, 08 Feb 2018 18:10:28 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF615BB26"'] + last-modified: ['Tue, 01 May 2018 21:46:14 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -255,17 +266,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['296'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:14 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:28 GMT'] - etag: ['"0x8D56F1F3C628616"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF67C097E"'] + last-modified: ['Tue, 01 May 2018 21:46:14 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -274,8 +286,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:14 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -283,9 +296,9 @@ interactions: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Z"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:28 GMT'] - etag: ['"0x8D56F1F3C628616"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF67C097E"'] + last-modified: ['Tue, 01 May 2018 21:46:14 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -297,17 +310,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['413'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:29 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:15 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:28 GMT'] - etag: ['"0x8D56F1F3C9B56CD"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF6B6FA41"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -316,8 +330,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:29 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:15 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -325,9 +340,9 @@ interactions: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Z"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:29 GMT'] - etag: ['"0x8D56F1F3C9B56CD"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF6B6FA41"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -339,17 +354,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['591'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:29 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:15 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:29 GMT'] - etag: ['"0x8D56F1F3CC864EF"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:14 GMT'] + etag: ['"0x8D5AFACF6F76A43"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -358,8 +374,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:29 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:15 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -367,9 +384,9 @@ interactions: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:29 GMT'] - etag: ['"0x8D56F1F3CC864EF"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:15 GMT'] + etag: ['"0x8D5AFACF6F76A43"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -378,8 +395,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:29 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:16 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -387,9 +405,9 @@ interactions: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:30 GMT'] - etag: ['"0x8D56F1F3CC864EF"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:15 GMT'] + etag: ['"0x8D5AFACF6F76A43"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -398,8 +416,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:30 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:16 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -407,9 +426,9 @@ interactions: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:29 GMT'] - etag: ['"0x8D56F1F3CC864EF"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] + etag: ['"0x8D5AFACF6F76A43"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -418,8 +437,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:30 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:16 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -427,9 +447,9 @@ interactions: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:30 GMT'] - etag: ['"0x8D56F1F3CC864EF"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] + etag: ['"0x8D5AFACF6F76A43"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -438,8 +458,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:30 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:17 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -447,9 +468,9 @@ interactions: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:30 GMT'] - etag: ['"0x8D56F1F3CC864EF"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:16 GMT'] + etag: ['"0x8D5AFACF6F76A43"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -458,8 +479,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:30 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:17 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -467,9 +489,9 @@ interactions: body: {string: "\uFEFFtest1ltest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:30 GMT'] - etag: ['"0x8D56F1F3CC864EF"'] - last-modified: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:17 GMT'] + etag: ['"0x8D5AFACF6F76A43"'] + last-modified: ['Tue, 01 May 2018 21:46:15 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -481,17 +503,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['597'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:31 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:17 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:30 GMT'] - etag: ['"0x8D56F1F3DD4E46E"'] - last-modified: ['Thu, 08 Feb 2018 18:10:31 GMT'] + date: ['Tue, 01 May 2018 21:46:17 GMT'] + etag: ['"0x8D5AFACF83C80BD"'] + last-modified: ['Tue, 01 May 2018 21:46:17 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -500,8 +523,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:31 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:17 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -509,9 +533,9 @@ interactions: body: {string: "\uFEFFtest1rtest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:30 GMT'] - etag: ['"0x8D56F1F3DD4E46E"'] - last-modified: ['Thu, 08 Feb 2018 18:10:31 GMT'] + date: ['Tue, 01 May 2018 21:46:17 GMT'] + etag: ['"0x8D5AFACF83C80BD"'] + last-modified: ['Tue, 01 May 2018 21:46:17 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -520,8 +544,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:31 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:18 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -529,9 +554,9 @@ interactions: body: {string: "\uFEFFtest1rtest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:31 GMT'] - etag: ['"0x8D56F1F3DD4E46E"'] - last-modified: ['Thu, 08 Feb 2018 18:10:31 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] + etag: ['"0x8D5AFACF83C80BD"'] + last-modified: ['Tue, 01 May 2018 21:46:17 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -543,17 +568,18 @@ interactions: headers: Connection: [keep-alive] Content-Length: ['491'] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:32 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:18 GMT'] x-ms-version: ['2017-07-29'] method: PUT uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl response: body: {string: ''} headers: - date: ['Thu, 08 Feb 2018 18:10:31 GMT'] - etag: ['"0x8D56F1F3E61402B"'] - last-modified: ['Thu, 08 Feb 2018 18:10:32 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] + etag: ['"0x8D5AFACF8B8A4FF"'] + last-modified: ['Tue, 01 May 2018 21:46:18 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -562,8 +588,9 @@ interactions: body: null headers: Connection: [keep-alive] - User-Agent: [Azure-Storage/1.1.0-1.1.0 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:32 GMT'] + User-Agent: [Azure-Storage/1.2.0rc0-1.1.0 (Python CPython 3.6.2; Windows 10) + AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:18 GMT'] x-ms-version: ['2017-07-29'] method: GET uri: https://clitest000002.file.core.windows.net/share000003?restype=share&comp=acl @@ -571,9 +598,9 @@ interactions: body: {string: "\uFEFFtest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zrwdl"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:31 GMT'] - etag: ['"0x8D56F1F3E61402B"'] - last-modified: ['Thu, 08 Feb 2018 18:10:32 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] + etag: ['"0x8D5AFACF8B8A4FF"'] + last-modified: ['Tue, 01 May 2018 21:46:18 GMT'] server: [Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-07-29'] @@ -588,8 +615,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -598,11 +625,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:32 GMT'] + date: ['Tue, 01 May 2018 21:46:18 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdWRlFVUlJVUTJONktSSk8zUzJUQ0dBR1ZQQzNPQVhUTUtKVXwzMUJCRjg5NkY5NEFGNjQ5LVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdBTjZVVkpRVDQ2Rko0TEpPSlZDTlFaT1daVEdDQ1hJM0pOS3xDRDNCNDNDNUU5QTVCNTVCLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1191'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_table_main_scenario.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_table_main_scenario.yaml index f211f104be5..acdd42171d5 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_table_main_scenario.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_storage_table_main_scenario.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "westus", "tags": {"use": "az-test"}}' + body: '{"location": "westus", "tags": {"product": "azurecli", "cause": "automation", + "date": "2018-05-01T21:45:28Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['50'] + Content-Length: ['110'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"westus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:45:28Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['328'] + content-length: ['384'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:39 GMT'] + date: ['Tue, 01 May 2018 21:45:29 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1177'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 201, message: Created} - request: body: '{"sku": {"name": "Standard_RAGRS"}, "kind": "Storage", "location": "westus", @@ -37,7 +39,7 @@ interactions: Content-Length: ['127'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002?api-version=2017-10-01 @@ -47,41 +49,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:41 GMT'] + date: ['Tue, 01 May 2018 21:45:31 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/3ff7d27d-7fcc-436e-9d35-d27e49f3b7dc?monitor=true&api-version=2017-10-01'] - pragma: [no-cache] - server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 - Microsoft-HTTPAPI/2.0'] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1190'] - status: {code: 202, message: Accepted} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - CommandName: [storage account create] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] - accept-language: [en-US] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/3ff7d27d-7fcc-436e-9d35-d27e49f3b7dc?monitor=true&api-version=2017-10-01 - response: - body: {string: ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:09:59 GMT'] - expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/3ff7d27d-7fcc-436e-9d35-d27e49f3b7dc?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/79bcc310-b663-4574-b037-da4e4560bf93?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} - request: body: null @@ -92,17 +68,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/3ff7d27d-7fcc-436e-9d35-d27e49f3b7dc?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/westus/asyncoperations/79bcc310-b663-4574-b037-da4e4560bf93?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:41.3203800Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:09:41.3203800Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:09:41.2578466Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} + body: {string: '{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002","name":"clitest000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:31.1057749Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:45:31.1057749Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:45:30.8713726Z","primaryEndpoints":{"blob":"https://clitest000002.blob.core.windows.net/","queue":"https://clitest000002.queue.core.windows.net/","table":"https://clitest000002.table.core.windows.net/","file":"https://clitest000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available","secondaryLocation":"eastus","statusOfSecondary":"available","secondaryEndpoints":{"blob":"https://clitest000002-secondary.blob.core.windows.net/","queue":"https://clitest000002-secondary.queue.core.windows.net/","table":"https://clitest000002-secondary.table.core.windows.net/"}}}'} headers: cache-control: [no-cache] content-length: ['1546'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:15 GMT'] + date: ['Tue, 01 May 2018 21:45:48 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -110,6 +86,7 @@ interactions: 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: null @@ -121,17 +98,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"gUenRqzGBNK7c9nkCXwOtvsqpb565IOCw5r/I8A4i6gdilHBL1X/7zYIAQ99L8jEHcaV0MMooN8U0e2C8byikQ==","permissions":"FULL"},{"keyName":"key2","value":"rsdSJkXe2VtbzCgncfrSovT8EHV823FHC7fCJTr3uGzTxvPc+SuO4jc2s5RS/koeniuQV0TLxiVoLlxjJpxr9A==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"Z3FEYeyIW6IQcbvStmYTdFMLV8s5CdlOSPJtcyjUcYiHUVsqFZ4vEhVc2l+gHDZ1RRmzHGJWFLzjSLx+MpTunQ==","permissions":"FULL"},{"keyName":"key2","value":"lP99LhszlGpYtEg9vFPFsTiVhY4yUzSOGR/uvL5Cy5EMBnu4Xd+EPS2PCfu4trIeppI7wWqUbSawLYjo7DhUBQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:17 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -139,7 +116,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1194'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 200, message: OK} - request: body: null @@ -151,17 +129,17 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: POST uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/clitest000002/listKeys?api-version=2017-10-01 response: - body: {string: '{"keys":[{"keyName":"key1","value":"gUenRqzGBNK7c9nkCXwOtvsqpb565IOCw5r/I8A4i6gdilHBL1X/7zYIAQ99L8jEHcaV0MMooN8U0e2C8byikQ==","permissions":"FULL"},{"keyName":"key2","value":"rsdSJkXe2VtbzCgncfrSovT8EHV823FHC7fCJTr3uGzTxvPc+SuO4jc2s5RS/koeniuQV0TLxiVoLlxjJpxr9A==","permissions":"FULL"}]}'} + body: {string: '{"keys":[{"keyName":"key1","value":"Z3FEYeyIW6IQcbvStmYTdFMLV8s5CdlOSPJtcyjUcYiHUVsqFZ4vEhVc2l+gHDZ1RRmzHGJWFLzjSLx+MpTunQ==","permissions":"FULL"},{"keyName":"key2","value":"lP99LhszlGpYtEg9vFPFsTiVhY4yUzSOGR/uvL5Cy5EMBnu4Xd+EPS2PCfu4trIeppI7wWqUbSawLYjo7DhUBQ==","permissions":"FULL"}]}'} headers: cache-control: [no-cache] content-length: ['288'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:10:18 GMT'] + date: ['Tue, 01 May 2018 21:45:49 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -169,7 +147,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1188'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] status: {code: 200, message: OK} - request: body: 'b''{"TableName": "table000003"}''' @@ -181,8 +160,8 @@ interactions: DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] Prefer: [return-no-content] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:19 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:50 GMT'] x-ms-version: ['2017-04-17'] method: POST uri: https://clitest000002.table.core.windows.net/Tables @@ -191,8 +170,8 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - dataserviceid: ['https://clitestdagorqwpomx2tg7ds.table.core.windows.net/Tables(''tablegqmljj6lkxci4urehdj'')'] - date: ['Thu, 08 Feb 2018 18:10:18 GMT'] + dataserviceid: ['https://clitestydki2n33vwyrmdoub.table.core.windows.net/Tables(''tablewtfhpnleqm5yr2w4clw'')'] + date: ['Tue, 01 May 2018 21:45:50 GMT'] location: ['https://clitest000002.table.core.windows.net/Tables(''table000003'')'] preference-applied: [return-no-content] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] @@ -206,8 +185,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:19 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:51 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/Tables('table000003') @@ -216,7 +195,7 @@ interactions: headers: cache-control: [no-cache] content-type: [application/json;odata=nometadata;streaming=true;charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:19 GMT'] + date: ['Tue, 01 May 2018 21:45:51 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-content-type-options: [nosniff] @@ -229,8 +208,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:19 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:51 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/Tables @@ -239,7 +218,7 @@ interactions: headers: cache-control: [no-cache] content-type: [application/json;odata=nometadata;streaming=true;charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:19 GMT'] + date: ['Tue, 01 May 2018 21:45:50 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-content-type-options: [nosniff] @@ -256,8 +235,8 @@ interactions: DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] Prefer: [return-no-content] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:52 GMT'] x-ms-version: ['2017-04-17'] method: POST uri: https://clitest000002.table.core.windows.net/table000003 @@ -266,9 +245,9 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - dataserviceid: ['https://clitestdagorqwpomx2tg7ds.table.core.windows.net/tablegqmljj6lkxci4urehdj(PartitionKey=''001'',RowKey=''001'')'] - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] - etag: [W/"datetime'2018-02-08T18%3A10%3A20.8644197Z'"] + dataserviceid: ['https://clitestydki2n33vwyrmdoub.table.core.windows.net/tablewtfhpnleqm5yr2w4clw(PartitionKey=''001'',RowKey=''001'')'] + date: ['Tue, 01 May 2018 21:45:52 GMT'] + etag: [W/"datetime'2018-05-01T21%3A45%3A52.1464357Z'"] location: ['https://clitest000002.table.core.windows.net/table000003(PartitionKey=''001'',RowKey=''001'')'] preference-applied: [return-no-content] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] @@ -282,18 +261,18 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:20 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:52 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003(PartitionKey='001',RowKey='001') response: - body: {string: '{"odata.metadata":"https://clitest000002.table.core.windows.net/$metadata#table000003/@Element","odata.etag":"W/\"datetime''2018-02-08T18%3A10%3A20.8644197Z''\"","PartitionKey":"001","RowKey":"001","Timestamp":"2018-02-08T18:10:20.8644197Z","name":"test","value":"something"}'} + body: {string: '{"odata.metadata":"https://clitest000002.table.core.windows.net/$metadata#table000003/@Element","odata.etag":"W/\"datetime''2018-05-01T21%3A45%3A52.1464357Z''\"","PartitionKey":"001","RowKey":"001","Timestamp":"2018-05-01T21:45:52.1464357Z","name":"test","value":"something"}'} headers: cache-control: [no-cache] content-type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] - etag: [W/"datetime'2018-02-08T18%3A10%3A20.8644197Z'"] + date: ['Tue, 01 May 2018 21:45:52 GMT'] + etag: [W/"datetime'2018-05-01T21%3A45%3A52.1464357Z'"] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-content-type-options: [nosniff] @@ -306,18 +285,18 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:52 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003(PartitionKey='001',RowKey='001')?%24select=name response: - body: {string: '{"odata.metadata":"https://clitest000002.table.core.windows.net/$metadata#table000003/@Element&$select=name","odata.etag":"W/\"datetime''2018-02-08T18%3A10%3A20.8644197Z''\"","name":"test"}'} + body: {string: '{"odata.metadata":"https://clitest000002.table.core.windows.net/$metadata#table000003/@Element&$select=name","odata.etag":"W/\"datetime''2018-05-01T21%3A45%3A52.1464357Z''\"","name":"test"}'} headers: cache-control: [no-cache] content-type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:20 GMT'] - etag: [W/"datetime'2018-02-08T18%3A10%3A20.8644197Z'"] + date: ['Tue, 01 May 2018 21:45:52 GMT'] + etag: [W/"datetime'2018-05-01T21%3A45%3A52.1464357Z'"] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-content-type-options: [nosniff] @@ -333,8 +312,8 @@ interactions: DataServiceVersion: [3.0;NetFx] If-Match: ['*'] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:53 GMT'] x-ms-version: ['2017-04-17'] method: MERGE uri: https://clitest000002.table.core.windows.net/table000003(PartitionKey='001',RowKey='001') @@ -343,8 +322,8 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - etag: [W/"datetime'2018-02-08T18%3A10%3A21.8044168Z'"] + date: ['Tue, 01 May 2018 21:45:52 GMT'] + etag: [W/"datetime'2018-05-01T21%3A45%3A53.2291965Z'"] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-content-type-options: [nosniff] x-ms-version: ['2017-04-17'] @@ -356,18 +335,18 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:53 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003(PartitionKey='001',RowKey='001') response: - body: {string: '{"odata.metadata":"https://clitest000002.table.core.windows.net/$metadata#table000003/@Element","odata.etag":"W/\"datetime''2018-02-08T18%3A10%3A21.8044168Z''\"","PartitionKey":"001","RowKey":"001","Timestamp":"2018-02-08T18:10:21.8044168Z","name":"test","value":"newval"}'} + body: {string: '{"odata.metadata":"https://clitest000002.table.core.windows.net/$metadata#table000003/@Element","odata.etag":"W/\"datetime''2018-05-01T21%3A45%3A53.2291965Z''\"","PartitionKey":"001","RowKey":"001","Timestamp":"2018-05-01T21:45:53.2291965Z","name":"test","value":"newval"}'} headers: cache-control: [no-cache] content-type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] - etag: [W/"datetime'2018-02-08T18%3A10%3A21.8044168Z'"] + date: ['Tue, 01 May 2018 21:45:53 GMT'] + etag: [W/"datetime'2018-05-01T21%3A45%3A53.2291965Z'"] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-content-type-options: [nosniff] @@ -383,8 +362,8 @@ interactions: DataServiceVersion: [3.0;NetFx] If-Match: ['*'] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:21 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:53 GMT'] x-ms-version: ['2017-04-17'] method: PUT uri: https://clitest000002.table.core.windows.net/table000003(PartitionKey='001',RowKey='001') @@ -393,8 +372,8 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] - etag: [W/"datetime'2018-02-08T18%3A10%3A22.4698026Z'"] + date: ['Tue, 01 May 2018 21:45:53 GMT'] + etag: [W/"datetime'2018-05-01T21%3A45%3A53.8687998Z'"] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-content-type-options: [nosniff] x-ms-version: ['2017-04-17'] @@ -406,18 +385,18 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:54 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003(PartitionKey='001',RowKey='001') response: - body: {string: '{"odata.metadata":"https://clitest000002.table.core.windows.net/$metadata#table000003/@Element","odata.etag":"W/\"datetime''2018-02-08T18%3A10%3A22.4698026Z''\"","PartitionKey":"001","RowKey":"001","Timestamp":"2018-02-08T18:10:22.4698026Z","cat":"hat"}'} + body: {string: '{"odata.metadata":"https://clitest000002.table.core.windows.net/$metadata#table000003/@Element","odata.etag":"W/\"datetime''2018-05-01T21%3A45%3A53.8687998Z''\"","PartitionKey":"001","RowKey":"001","Timestamp":"2018-05-01T21:45:53.8687998Z","cat":"hat"}'} headers: cache-control: [no-cache] content-type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:21 GMT'] - etag: [W/"datetime'2018-02-08T18%3A10%3A22.4698026Z'"] + date: ['Tue, 01 May 2018 21:45:53 GMT'] + etag: [W/"datetime'2018-05-01T21%3A45%3A53.8687998Z'"] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-content-type-options: [nosniff] @@ -432,8 +411,8 @@ interactions: DataServiceVersion: [3.0;NetFx] If-Match: ['*'] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:54 GMT'] x-ms-version: ['2017-04-17'] method: DELETE uri: https://clitest000002.table.core.windows.net/table000003(PartitionKey='001',RowKey='001') @@ -442,7 +421,7 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + date: ['Tue, 01 May 2018 21:45:54 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-content-type-options: [nosniff] x-ms-version: ['2017-04-17'] @@ -454,18 +433,18 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:54 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003(PartitionKey='001',RowKey='001') response: body: {string: '{"odata.error":{"code":"ResourceNotFound","message":{"lang":"en-US","value":"The - specified resource does not exist.\nRequestId:dfe796d2-0002-00f9-6f08-a1c9d2000000\nTime:2018-02-08T18:10:23.2516014Z"}}}'} + specified resource does not exist.\nRequestId:281b235d-b002-00dd-2595-e1beac000000\nTime:2018-05-01T21:45:54.8674700Z"}}}'} headers: cache-control: [no-cache] content-type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:22 GMT'] + date: ['Tue, 01 May 2018 21:45:53 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-content-type-options: [nosniff] @@ -477,8 +456,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:55 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -487,7 +466,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:45:54 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -498,8 +477,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:55 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -508,7 +487,7 @@ interactions: \ />"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:45:55 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -522,8 +501,8 @@ interactions: Content-Length: ['184'] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:55 GMT'] x-ms-version: ['2017-04-17'] method: PUT uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -531,7 +510,7 @@ interactions: body: {string: ''} headers: content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:45:55 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-ms-version: ['2017-04-17'] status: {code: 204, message: No Content} @@ -541,8 +520,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:55 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -550,7 +529,7 @@ interactions: body: {string: "\uFEFFtest1a"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:45:55 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -564,8 +543,8 @@ interactions: Content-Length: ['296'] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:55 GMT'] x-ms-version: ['2017-04-17'] method: PUT uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -573,7 +552,7 @@ interactions: body: {string: ''} headers: content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:45:55 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-ms-version: ['2017-04-17'] status: {code: 204, message: No Content} @@ -583,8 +562,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:56 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -592,7 +571,7 @@ interactions: body: {string: "\uFEFFtest1atest22016-01-01T00:00:00.0000000Z"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:45:55 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -606,8 +585,8 @@ interactions: Content-Length: ['413'] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:56 GMT'] x-ms-version: ['2017-04-17'] method: PUT uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -615,7 +594,7 @@ interactions: body: {string: ''} headers: content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:23 GMT'] + date: ['Tue, 01 May 2018 21:45:55 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-ms-version: ['2017-04-17'] status: {code: 204, message: No Content} @@ -625,8 +604,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:56 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -634,7 +613,7 @@ interactions: body: {string: "\uFEFFtest1atest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Z"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + date: ['Tue, 01 May 2018 21:45:56 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -648,8 +627,8 @@ interactions: Content-Length: ['591'] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:56 GMT'] x-ms-version: ['2017-04-17'] method: PUT uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -657,7 +636,7 @@ interactions: body: {string: ''} headers: content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + date: ['Tue, 01 May 2018 21:45:56 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-ms-version: ['2017-04-17'] status: {code: 204, message: No Content} @@ -667,8 +646,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:24 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:57 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -676,7 +655,7 @@ interactions: body: {string: "\uFEFFtest1atest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zraud"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + date: ['Tue, 01 May 2018 21:45:56 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -687,8 +666,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:57 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -696,7 +675,7 @@ interactions: body: {string: "\uFEFFtest1atest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zraud"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + date: ['Tue, 01 May 2018 21:45:56 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -707,8 +686,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:57 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -716,7 +695,7 @@ interactions: body: {string: "\uFEFFtest1atest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zraud"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + date: ['Tue, 01 May 2018 21:45:57 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -727,8 +706,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:25 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:58 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -736,7 +715,7 @@ interactions: body: {string: "\uFEFFtest1atest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zraud"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + date: ['Tue, 01 May 2018 21:45:57 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -747,8 +726,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:58 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -756,7 +735,7 @@ interactions: body: {string: "\uFEFFtest1atest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zraud"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + date: ['Tue, 01 May 2018 21:45:57 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -767,8 +746,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:58 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -776,7 +755,7 @@ interactions: body: {string: "\uFEFFtest1atest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zraud"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + date: ['Tue, 01 May 2018 21:45:58 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -790,8 +769,8 @@ interactions: Content-Length: ['598'] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:58 GMT'] x-ms-version: ['2017-04-17'] method: PUT uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -799,7 +778,7 @@ interactions: body: {string: ''} headers: content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + date: ['Tue, 01 May 2018 21:45:58 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-ms-version: ['2017-04-17'] status: {code: 204, message: No Content} @@ -809,8 +788,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:59 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -818,7 +797,7 @@ interactions: body: {string: "\uFEFFtest1autest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zraud"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:26 GMT'] + date: ['Tue, 01 May 2018 21:45:58 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -829,8 +808,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:27 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:59 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -838,7 +817,7 @@ interactions: body: {string: "\uFEFFtest1autest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zraud"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:27 GMT'] + date: ['Tue, 01 May 2018 21:45:58 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -852,8 +831,8 @@ interactions: Content-Length: ['491'] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:27 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:59 GMT'] x-ms-version: ['2017-04-17'] method: PUT uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -861,7 +840,7 @@ interactions: body: {string: ''} headers: content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:27 GMT'] + date: ['Tue, 01 May 2018 21:45:58 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-ms-version: ['2017-04-17'] status: {code: 204, message: No Content} @@ -871,8 +850,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:27 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:45:59 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/table000003?comp=acl @@ -880,7 +859,7 @@ interactions: body: {string: "\uFEFFtest22016-01-01T00:00:00.0000000Ztest32018-01-01T00:00:00.0000000Ztest42016-01-01T00:00:00.0000000Z2016-05-01T00:00:00.0000000Zraud"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:27 GMT'] + date: ['Tue, 01 May 2018 21:45:59 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -893,8 +872,8 @@ interactions: Content-Length: ['0'] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:27 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:00 GMT'] x-ms-version: ['2017-04-17'] method: DELETE uri: https://clitest000002.table.core.windows.net/Tables('table000003') @@ -903,7 +882,7 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + date: ['Tue, 01 May 2018 21:46:00 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] x-content-type-options: [nosniff] x-ms-version: ['2017-04-17'] @@ -915,18 +894,18 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:00 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002.table.core.windows.net/Tables('table000003') response: body: {string: '{"odata.error":{"code":"ResourceNotFound","message":{"lang":"en-US","value":"The - specified resource does not exist.\nRequestId:8a828247-0002-00fe-3808-a13f57000000\nTime:2018-02-08T18:10:28.8979906Z"}}}'} + specified resource does not exist.\nRequestId:a8068353-4002-00ae-0a95-e1ce6f000000\nTime:2018-05-01T21:46:00.8222096Z"}}}'} headers: cache-control: [no-cache] content-type: [application/json;odata=nometadata;streaming=true;charset=utf-8] - date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + date: ['Tue, 01 May 2018 21:46:00 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-content-type-options: [nosniff] @@ -938,8 +917,8 @@ interactions: Connection: [keep-alive] DataServiceVersion: [3.0;NetFx] MaxDataServiceVersion: ['3.0'] - User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.27] - x-ms-date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + User-Agent: [Azure-CosmosDB/0.37.1 (Python CPython 3.6.2; Windows 10) AZURECLI/2.0.32] + x-ms-date: ['Tue, 01 May 2018 21:46:00 GMT'] x-ms-version: ['2017-04-17'] method: GET uri: https://clitest000002-secondary.table.core.windows.net/?restype=service&comp=stats @@ -947,7 +926,7 @@ interactions: body: {string: "\uFEFFunavailable"} headers: content-type: [application/xml] - date: ['Thu, 08 Feb 2018 18:10:28 GMT'] + date: ['Tue, 01 May 2018 21:46:01 GMT'] server: [Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0] transfer-encoding: [chunked] x-ms-version: ['2017-04-17'] @@ -962,8 +941,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -972,11 +951,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:10:29 GMT'] + date: ['Tue, 01 May 2018 21:46:01 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdTT1ZBWE42VzVPRVBXSFRHVUJOQTc2NDdDNjY1U0ZJV0dFVnw0NTE2MTkzQzY5NDVDRjFBLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdBVU5HT1JXWVBBR1VRMlVFSDc3VllFWFc3QkRNVTcyWjdWSnxDOEZGRDEyMEQyOTc4OThCLVdFU1RVUyIsImpvYkxvY2F0aW9uIjoid2VzdHVzIn0?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1189'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1199'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_update_storage_account_with_assigned_identity.yaml b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_update_storage_account_with_assigned_identity.yaml index 54254ec56e8..7b6d705f6c1 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_update_storage_account_with_assigned_identity.yaml +++ b/src/storage-preview/azext_storage_preview/tests/latest/recordings/test_update_storage_account_with_assigned_identity.yaml @@ -1,30 +1,32 @@ interactions: - request: - body: '{"location": "southcentralus", "tags": {"use": "az-test"}}' + body: '{"location": "southcentralus", "tags": {"product": "azurecli", "cause": + "automation", "date": "2018-05-01T21:51:44Z"}}' headers: Accept: [application/json] Accept-Encoding: ['gzip, deflate'] CommandName: [group create] Connection: [keep-alive] - Content-Length: ['58'] + Content-Length: ['118'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:51:44Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['336'] + content-length: ['392'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:15:30 GMT'] + date: ['Tue, 01 May 2018 21:51:45 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1185'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1195'] status: {code: 201, message: Created} - request: body: null @@ -35,22 +37,23 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 response: - body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"use":"az-test"},"properties":{"provisioningState":"Succeeded"}}'} + body: {string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001","name":"clitest.rg000001","location":"southcentralus","tags":{"product":"azurecli","cause":"automation","date":"2018-05-01T21:51:44Z"},"properties":{"provisioningState":"Succeeded"}}'} headers: cache-control: [no-cache] - content-length: ['336'] + content-length: ['392'] content-type: [application/json; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:15:30 GMT'] + date: ['Tue, 01 May 2018 21:51:45 GMT'] expires: ['-1'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] vary: [Accept-Encoding] + x-content-type-options: [nosniff] status: {code: 200, message: OK} - request: body: '{"sku": {"name": "Standard_LRS"}, "kind": "Storage", "location": "southcentralus", @@ -63,7 +66,7 @@ interactions: Content-Length: ['133'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PUT uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 @@ -73,14 +76,15 @@ interactions: cache-control: [no-cache] content-length: ['0'] content-type: [text/plain; charset=utf-8] - date: ['Thu, 08 Feb 2018 18:15:32 GMT'] + date: ['Tue, 01 May 2018 21:51:47 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/4a467c9c-ebeb-4391-b4c5-f2b7ebfa0bfe?monitor=true&api-version=2017-10-01'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/1157a6d0-1a72-479b-bdb7-5a1b7bb482ed?monitor=true&api-version=2017-10-01'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 Microsoft-HTTPAPI/2.0'] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1186'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1194'] status: {code: 202, message: Accepted} - request: body: null @@ -91,17 +95,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/4a467c9c-ebeb-4391-b4c5-f2b7ebfa0bfe?monitor=true&api-version=2017-10-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/locations/southcentralus/asyncoperations/1157a6d0-1a72-479b-bdb7-5a1b7bb482ed?monitor=true&api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:15:31.9838936Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:15:31.9838936Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:15:31.9214188Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:51:47.7085650Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:51:47.7085650Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:51:47.6460648Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1247'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:15:50 GMT'] + date: ['Tue, 01 May 2018 21:52:05 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -109,6 +113,7 @@ interactions: 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: null @@ -119,17 +124,17 @@ interactions: Connection: [keep-alive] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: GET uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 response: - body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:15:31.9838936Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:15:31.9838936Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:15:31.9214188Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} + body: {string: '{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:51:47.7085650Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:51:47.7085650Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:51:47.6460648Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1247'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:15:51 GMT'] + date: ['Tue, 01 May 2018 21:52:06 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -137,6 +142,7 @@ interactions: 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: '{"sku": {"name": "Standard_LRS"}, "tags": {}, "identity": {"type": "SystemAssigned"}, @@ -152,17 +158,17 @@ interactions: Content-Length: ['366'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.27] + msrest_azure/0.4.25 azure-mgmt-storage/1.5.0 Azure-SDK-For-Python AZURECLI/2.0.32] accept-language: [en-US] method: PATCH uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002?api-version=2017-10-01 response: - body: {string: '{"identity":{"principalId":"6a4c76ca-9f31-4cb4-9417-1a6bb8b02298","tenantId":"54826b22-38d6-4fb2-bad9-b7b93a3e9c5a","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-02-08T18:15:31.9838936Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-02-08T18:15:31.9838936Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-02-08T18:15:31.9214188Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} + body: {string: '{"identity":{"principalId":"e4f48cdc-5905-49fd-98f5-13ef0b6cbff9","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"SystemAssigned"},"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"Storage","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.Storage/storageAccounts/cli000002","name":"cli000002","type":"Microsoft.Storage/storageAccounts","location":"southcentralus","tags":{},"properties":{"networkAcls":{"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"trustedDirectories":["72f988bf-86f1-41af-91ab-2d7cd011db47"],"supportsHttpsTrafficOnly":false,"encryption":{"services":{"file":{"enabled":true,"lastEnabledTime":"2018-05-01T21:51:47.7085650Z"},"blob":{"enabled":true,"lastEnabledTime":"2018-05-01T21:51:47.7085650Z"}},"keySource":"Microsoft.Storage"},"provisioningState":"Succeeded","creationTime":"2018-05-01T21:51:47.6460648Z","primaryEndpoints":{"blob":"https://cli000002.blob.core.windows.net/","queue":"https://cli000002.queue.core.windows.net/","table":"https://cli000002.table.core.windows.net/","file":"https://cli000002.file.core.windows.net/"},"primaryLocation":"southcentralus","statusOfPrimary":"available"}}'} headers: cache-control: [no-cache] content-length: ['1387'] content-type: [application/json] - date: ['Thu, 08 Feb 2018 18:15:54 GMT'] + date: ['Tue, 01 May 2018 21:52:09 GMT'] expires: ['-1'] pragma: [no-cache] server: ['Microsoft-Azure-Storage-Resource-Provider/1.0,Microsoft-HTTPAPI/2.0 @@ -170,7 +176,8 @@ interactions: strict-transport-security: [max-age=31536000; includeSubDomains] transfer-encoding: [chunked] vary: [Accept-Encoding] - x-ms-ratelimit-remaining-subscription-writes: ['1168'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] status: {code: 200, message: OK} - request: body: null @@ -182,8 +189,8 @@ interactions: Content-Length: ['0'] Content-Type: [application/json; charset=utf-8] User-Agent: [python/3.6.2 (Windows-10-10.0.16299-SP0) requests/2.18.4 msrest/0.4.26 - msrest_azure/0.4.21 resourcemanagementclient/1.2.1 Azure-SDK-For-Python - AZURECLI/2.0.27] + msrest_azure/0.4.25 resourcemanagementclient/1.2.1 Azure-SDK-For-Python + AZURECLI/2.0.32] accept-language: [en-US] method: DELETE uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/clitest.rg000001?api-version=2017-05-10 @@ -192,11 +199,12 @@ interactions: headers: cache-control: [no-cache] content-length: ['0'] - date: ['Thu, 08 Feb 2018 18:15:56 GMT'] + date: ['Tue, 01 May 2018 21:52:10 GMT'] expires: ['-1'] - location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdVUk9JWUpCV01MQkdZQjNHUlVMU1JETlJXT0VTSERTMkFQSXwzNzg1QjFFNjA3RTMyQTA2LVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] + location: ['https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1DTElURVNUOjJFUkdDVkdPMk1FWkZVRkpHWjRFVE82R1lQNldIUks1R0RDRTZWT3wwN0RDNUFFOTU1NTdFMjRBLVNPVVRIQ0VOVFJBTFVTIiwiam9iTG9jYXRpb24iOiJzb3V0aGNlbnRyYWx1cyJ9?api-version=2017-05-10'] pragma: [no-cache] strict-transport-security: [max-age=31536000; includeSubDomains] - x-ms-ratelimit-remaining-subscription-writes: ['1184'] + x-content-type-options: [nosniff] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] status: {code: 202, message: Accepted} version: 1 diff --git a/src/storage-preview/azext_storage_preview/tests/latest/test_storage_validators.py b/src/storage-preview/azext_storage_preview/tests/latest/test_storage_validators.py index 1a3ebc3076d..2f119e748ca 100644 --- a/src/storage-preview/azext_storage_preview/tests/latest/test_storage_validators.py +++ b/src/storage-preview/azext_storage_preview/tests/latest/test_storage_validators.py @@ -11,7 +11,7 @@ from azure.cli.core._config import GLOBAL_CONFIG_DIR, ENV_VAR_PREFIX from azure.cli.core.cloud import get_active_cloud -from azure.cli.core.profiles import get_sdk, ResourceType, supported_api_version +from azure.cli.core.profiles import get_sdk, ResourceType, supported_api_version, register_resource_type from ..._validators import (get_permission_validator, get_datetime_type, ipv4_range_type, resource_type_type, services_type, @@ -19,6 +19,7 @@ from azure.cli.testsdk import api_version_constraint from ..._validators import (get_source_file_or_blob_service_client, validate_encryption_source, validate_encryption_services) +from ...profiles import CUSTOM_DATA_STORAGE class MockCLI(CLI): @@ -31,10 +32,11 @@ def __init__(self): class MockLoader(object): def __init__(self, ctx): self.ctx = ctx + register_resource_type('latest', CUSTOM_DATA_STORAGE, '2017-11-09') def get_models(self, *attr_args, **_): from azure.cli.core.profiles import get_sdk - return get_sdk(self.ctx, ResourceType.DATA_STORAGE, *attr_args, mod='models') + return get_sdk(self.ctx, CUSTOM_DATA_STORAGE, *attr_args, mod='models') class MockCmd(object): @@ -43,7 +45,7 @@ def __init__(self, ctx): self.loader = MockLoader(self.cli_ctx) def get_models(self, *attr_args, **kwargs): - return get_sdk(self.cli_ctx, ResourceType.DATA_STORAGE, *attr_args, **kwargs) + return get_sdk(self.cli_ctx, CUSTOM_DATA_STORAGE, *attr_args, **kwargs) class TestStorageValidators(unittest.TestCase): @@ -56,7 +58,7 @@ def tearDown(self): self.io.close() def test_permission_validator(self): - t_container_permissions = get_sdk(self.cli, ResourceType.DATA_STORAGE, 'blob.models#ContainerPermissions') + t_container_permissions = get_sdk(self.cli, CUSTOM_DATA_STORAGE, 'blob.models#ContainerPermissions') ns1 = Namespace(permission='rwdl') ns2 = Namespace(permission='abc') @@ -118,8 +120,8 @@ def test_resource_types_type(self): def test_services_type(self): input = "ttfqbqtf" actual = str(services_type(self.loader)(input)) - if supported_api_version(self.cli, ResourceType.DATA_STORAGE, max_api='2016-05-31') or \ - supported_api_version(self.cli, ResourceType.DATA_STORAGE, min_api='2017-07-29'): + if supported_api_version(self.cli, CUSTOM_DATA_STORAGE, max_api='2016-05-31') or \ + supported_api_version(self.cli, CUSTOM_DATA_STORAGE, min_api='2017-07-29'): expected = "bqtf" else: expected = "bqf" diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/__init__.py b/src/storage-preview/azext_storage_preview/vendored_sdks/__init__.py new file mode 100644 index 00000000000..de40ea7ca05 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/__init__.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/__init__.py new file mode 100644 index 00000000000..de40ea7ca05 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/__init__.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/__init__.py new file mode 100644 index 00000000000..de40ea7ca05 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/__init__.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/__init__.py new file mode 100644 index 00000000000..eb3e5d0fde3 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/__init__.py @@ -0,0 +1,31 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from .appendblobservice import AppendBlobService +from .blockblobservice import BlockBlobService +from .models import ( + Container, + ContainerProperties, + Blob, + BlobProperties, + BlobBlock, + BlobBlockList, + PageRange, + ContentSettings, + CopyProperties, + ContainerPermissions, + BlobPermissions, + _LeaseActions, + AppendBlockProperties, + PageBlobProperties, + ResourceProperties, + Include, + SequenceNumberAction, + BlockListType, + PublicAccess, + BlobPrefix, + DeleteSnapshot, +) +from .pageblobservice import PageBlobService diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_constants.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_constants.py new file mode 100644 index 00000000000..b1b09ba3269 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_constants.py @@ -0,0 +1,14 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +__author__ = 'Microsoft Corp. ' +__version__ = '1.2.0rc0' + +# x-ms-version for storage service. +X_MS_VERSION = '2017-11-09' + +# internal configurations, should not be changed +_LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE = 4 * 1024 * 1024 diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_deserialization.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_deserialization.py new file mode 100644 index 00000000000..a2f7b08e3a6 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_deserialization.py @@ -0,0 +1,436 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from azure.common import AzureException +from dateutil import parser + +try: + from xml.etree import cElementTree as ETree +except ImportError: + from xml.etree import ElementTree as ETree +from ..common._common_conversion import ( + _decode_base64_to_text, + _to_str, + _get_content_md5 +) +from ..common._deserialization import ( + _parse_properties, + _to_int, + _parse_metadata, + _convert_xml_to_signed_identifiers, + _bool, +) +from .models import ( + Container, + Blob, + BlobBlock, + BlobBlockList, + BlobBlockState, + BlobProperties, + PageRange, + ContainerProperties, + AppendBlockProperties, + PageBlobProperties, + ResourceProperties, + BlobPrefix, +) +from ._encryption import _decrypt_blob +from ..common.models import _list +from ..common._error import ( + _validate_content_match, + _ERROR_DECRYPTION_FAILURE, +) + + +def _parse_base_properties(response): + ''' + Extracts basic response headers. + ''' + resource_properties = ResourceProperties() + resource_properties.last_modified = parser.parse(response.headers.get('last-modified')) + resource_properties.etag = response.headers.get('etag') + + return resource_properties + + +def _parse_page_properties(response): + ''' + Extracts page response headers. + ''' + put_page = PageBlobProperties() + put_page.last_modified = parser.parse(response.headers.get('last-modified')) + put_page.etag = response.headers.get('etag') + put_page.sequence_number = _to_int(response.headers.get('x-ms-blob-sequence-number')) + + return put_page + + +def _parse_append_block(response): + ''' + Extracts append block response headers. + ''' + append_block = AppendBlockProperties() + append_block.last_modified = parser.parse(response.headers.get('last-modified')) + append_block.etag = response.headers.get('etag') + append_block.append_offset = _to_int(response.headers.get('x-ms-blob-append-offset')) + append_block.committed_block_count = _to_int(response.headers.get('x-ms-blob-committed-block-count')) + + return append_block + + +def _parse_snapshot_blob(response, name): + ''' + Extracts snapshot return header. + ''' + snapshot = response.headers.get('x-ms-snapshot') + + return _parse_blob(response, name, snapshot) + + +def _parse_lease(response): + ''' + Extracts lease time and ID return headers. + ''' + lease = {'time': response.headers.get('x-ms-lease-time')} + if lease['time']: + lease['time'] = _to_int(lease['time']) + + lease['id'] = response.headers.get('x-ms-lease-id') + + return lease + + +def _parse_blob(response, name, snapshot, validate_content=False, require_encryption=False, + key_encryption_key=None, key_resolver_function=None, start_offset=None, end_offset=None): + if response is None: + return None + + metadata = _parse_metadata(response) + props = _parse_properties(response, BlobProperties) + + # For range gets, only look at 'x-ms-blob-content-md5' for overall MD5 + content_settings = getattr(props, 'content_settings') + if 'content-range' in response.headers: + if 'x-ms-blob-content-md5' in response.headers: + setattr(content_settings, 'content_md5', _to_str(response.headers['x-ms-blob-content-md5'])) + else: + delattr(content_settings, 'content_md5') + + if validate_content: + computed_md5 = _get_content_md5(response.body) + _validate_content_match(response.headers['content-md5'], computed_md5) + + if key_encryption_key is not None or key_resolver_function is not None: + try: + response.body = _decrypt_blob(require_encryption, key_encryption_key, key_resolver_function, + response, start_offset, end_offset) + except: + raise AzureException(_ERROR_DECRYPTION_FAILURE) + + return Blob(name, snapshot, response.body, props, metadata) + + +def _parse_container(response, name): + if response is None: + return None + + metadata = _parse_metadata(response) + props = _parse_properties(response, ContainerProperties) + return Container(name, props, metadata) + + +def _convert_xml_to_signed_identifiers_and_access(response): + acl = _convert_xml_to_signed_identifiers(response) + acl.public_access = response.headers.get('x-ms-blob-public-access') + + return acl + + +def _convert_xml_to_containers(response): + ''' + + + string-value + string-value + int-value + + + container-name + + date/time-value + etag + locked | unlocked + available | leased | expired | breaking | broken + infinite | fixed + blob | container + + + value + + + + marker-value + + ''' + if response is None or response.body is None: + return None + + containers = _list() + list_element = ETree.fromstring(response.body) + + # Set next marker + setattr(containers, 'next_marker', list_element.findtext('NextMarker')) + + containers_element = list_element.find('Containers') + + for container_element in containers_element.findall('Container'): + # Name element + container = Container() + container.name = container_element.findtext('Name') + + # Metadata + metadata_root_element = container_element.find('Metadata') + if metadata_root_element is not None: + container.metadata = dict() + for metadata_element in metadata_root_element: + container.metadata[metadata_element.tag] = metadata_element.text + + # Properties + properties_element = container_element.find('Properties') + container.properties.etag = properties_element.findtext('Etag') + container.properties.last_modified = parser.parse(properties_element.findtext('Last-Modified')) + container.properties.lease_status = properties_element.findtext('LeaseStatus') + container.properties.lease_state = properties_element.findtext('LeaseState') + container.properties.lease_duration = properties_element.findtext('LeaseDuration') + container.properties.public_access = properties_element.findtext('PublicAccess') + + # Add container to list + containers.append(container) + + return containers + + +LIST_BLOBS_ATTRIBUTE_MAP = { + 'Last-Modified': (None, 'last_modified', parser.parse), + 'Etag': (None, 'etag', _to_str), + 'x-ms-blob-sequence-number': (None, 'sequence_number', _to_int), + 'BlobType': (None, 'blob_type', _to_str), + 'Content-Length': (None, 'content_length', _to_int), + 'ServerEncrypted': (None, 'server_encrypted', _bool), + 'Content-Type': ('content_settings', 'content_type', _to_str), + 'Content-Encoding': ('content_settings', 'content_encoding', _to_str), + 'Content-Disposition': ('content_settings', 'content_disposition', _to_str), + 'Content-Language': ('content_settings', 'content_language', _to_str), + 'Content-MD5': ('content_settings', 'content_md5', _to_str), + 'Cache-Control': ('content_settings', 'cache_control', _to_str), + 'LeaseStatus': ('lease', 'status', _to_str), + 'LeaseState': ('lease', 'state', _to_str), + 'LeaseDuration': ('lease', 'duration', _to_str), + 'CopyId': ('copy', 'id', _to_str), + 'CopySource': ('copy', 'source', _to_str), + 'CopyStatus': ('copy', 'status', _to_str), + 'CopyProgress': ('copy', 'progress', _to_str), + 'CopyCompletionTime': ('copy', 'completion_time', _to_str), + 'CopyStatusDescription': ('copy', 'status_description', _to_str), + 'AccessTier': (None, 'blob_tier', _to_str), + 'AccessTierChangeTime': (None, 'blob_tier_change_time', parser.parse), + 'AccessTierInferred': (None, 'blob_tier_inferred', _bool), + 'ArchiveStatus': (None, 'rehydration_status', _to_str), + 'DeletedTime': (None, 'deleted_time', parser.parse), + 'RemainingRetentionDays': (None, 'remaining_retention_days', _to_int), +} + + +def _convert_xml_to_blob_list(response): + ''' + + + string-value + string-value + int-value + string-value + + + blob-name + true + date-time-value + + date-time-value + etag + size-in-bytes + blob-content-type + + + + + sequence-number + BlockBlob|PageBlob|AppendBlob + locked|unlocked + available | leased | expired | breaking | broken + infinite | fixed + id + pending | success | aborted | failed + source url + bytes copied/bytes total + datetime + error string + P4 | P6 | P10 | P20 | P30 | P40 | P50 | P60 | Archive | Cool | Hot + date-time-value + true + datetime + int + + + value + + + + blob-prefix + + + + + ''' + if response is None or response.body is None: + return None + + blob_list = _list() + list_element = ETree.fromstring(response.body) + + setattr(blob_list, 'next_marker', list_element.findtext('NextMarker')) + + blobs_element = list_element.find('Blobs') + blob_prefix_elements = blobs_element.findall('BlobPrefix') + if blob_prefix_elements is not None: + for blob_prefix_element in blob_prefix_elements: + prefix = BlobPrefix() + prefix.name = blob_prefix_element.findtext('Name') + blob_list.append(prefix) + + for blob_element in blobs_element.findall('Blob'): + blob = Blob() + blob.name = blob_element.findtext('Name') + blob.snapshot = blob_element.findtext('Snapshot') + + deleted = blob_element.findtext('Deleted') + if deleted: + blob.deleted = _bool(deleted) + + # Properties + properties_element = blob_element.find('Properties') + if properties_element is not None: + for property_element in properties_element: + info = LIST_BLOBS_ATTRIBUTE_MAP.get(property_element.tag) + if info is None: + setattr(blob.properties, property_element.tag, _to_str(property_element.text)) + elif info[0] is None: + setattr(blob.properties, info[1], info[2](property_element.text)) + else: + attr = getattr(blob.properties, info[0]) + setattr(attr, info[1], info[2](property_element.text)) + + # Metadata + metadata_root_element = blob_element.find('Metadata') + if metadata_root_element is not None: + blob.metadata = dict() + for metadata_element in metadata_root_element: + blob.metadata[metadata_element.tag] = metadata_element.text + + # Add blob to list + blob_list.append(blob) + + return blob_list + + +def _convert_xml_to_block_list(response): + ''' + + + + + base64-encoded-block-id + size-in-bytes + + + + + base64-encoded-block-id + size-in-bytes + + + + + Converts xml response to block list class. + ''' + if response is None or response.body is None: + return None + + block_list = BlobBlockList() + + list_element = ETree.fromstring(response.body) + + committed_blocks_element = list_element.find('CommittedBlocks') + if committed_blocks_element is not None: + for block_element in committed_blocks_element.findall('Block'): + block_id = _decode_base64_to_text(block_element.findtext('Name', '')) + block_size = int(block_element.findtext('Size')) + block = BlobBlock(id=block_id, state=BlobBlockState.Committed) + block._set_size(block_size) + block_list.committed_blocks.append(block) + + uncommitted_blocks_element = list_element.find('UncommittedBlocks') + if uncommitted_blocks_element is not None: + for block_element in uncommitted_blocks_element.findall('Block'): + block_id = _decode_base64_to_text(block_element.findtext('Name', '')) + block_size = int(block_element.findtext('Size')) + block = BlobBlock(id=block_id, state=BlobBlockState.Uncommitted) + block._set_size(block_size) + block_list.uncommitted_blocks.append(block) + + return block_list + + +def _convert_xml_to_page_ranges(response): + ''' + + + + Start Byte + End Byte + + + Start Byte + End Byte + + + Start Byte + End Byte + + + ''' + if response is None or response.body is None: + return None + + page_list = list() + + list_element = ETree.fromstring(response.body) + + for page_range_element in list_element: + if page_range_element.tag == 'PageRange': + is_cleared = False + elif page_range_element.tag == 'ClearRange': + is_cleared = True + else: + pass # ignore any unrecognized Page Range types + + page_list.append( + PageRange( + int(page_range_element.findtext('Start')), + int(page_range_element.findtext('End')), + is_cleared + ) + ) + + return page_list diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_download_chunking.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_download_chunking.py new file mode 100644 index 00000000000..067b16d0265 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_download_chunking.py @@ -0,0 +1,127 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import threading + +from ..common._error import _ERROR_NO_SINGLE_THREAD_CHUNKING + + +def _download_blob_chunks(blob_service, container_name, blob_name, snapshot, + download_size, block_size, progress, start_range, end_range, + stream, max_connections, progress_callback, validate_content, + lease_id, if_modified_since, if_unmodified_since, if_match, + if_none_match, timeout, operation_context): + if max_connections <= 1: + raise ValueError(_ERROR_NO_SINGLE_THREAD_CHUNKING.format('blob')) + + downloader = _BlobChunkDownloader( + blob_service, + container_name, + blob_name, + snapshot, + download_size, + block_size, + progress, + start_range, + end_range, + stream, + progress_callback, + validate_content, + lease_id, + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout, + operation_context, + ) + + import concurrent.futures + executor = concurrent.futures.ThreadPoolExecutor(max_connections) + result = list(executor.map(downloader.process_chunk, downloader.get_chunk_offsets())) + + +class _BlobChunkDownloader(object): + def __init__(self, blob_service, container_name, blob_name, snapshot, download_size, + chunk_size, progress, start_range, end_range, stream, + progress_callback, validate_content, lease_id, if_modified_since, + if_unmodified_since, if_match, if_none_match, timeout, operation_context): + self.blob_service = blob_service + self.container_name = container_name + self.blob_name = blob_name + self.snapshot = snapshot + self.chunk_size = chunk_size + + self.download_size = download_size + self.start_index = start_range + self.blob_end = end_range + + self.stream = stream + self.stream_start = stream.tell() + self.stream_lock = threading.Lock() + self.progress_callback = progress_callback + self.progress_total = progress + self.progress_lock = threading.Lock() + self.timeout = timeout + self.operation_context = operation_context + + self.validate_content = validate_content + self.lease_id = lease_id + self.if_modified_since = if_modified_since + self.if_unmodified_since = if_unmodified_since + self.if_match = if_match + self.if_none_match = if_none_match + + def get_chunk_offsets(self): + index = self.start_index + while index < self.blob_end: + yield index + index += self.chunk_size + + def process_chunk(self, chunk_start): + if chunk_start + self.chunk_size > self.blob_end: + chunk_end = self.blob_end + else: + chunk_end = chunk_start + self.chunk_size + + chunk_data = self._download_chunk(chunk_start, chunk_end).content + length = chunk_end - chunk_start + if length > 0: + self._write_to_stream(chunk_data, chunk_start) + self._update_progress(length) + + def _update_progress(self, length): + if self.progress_callback is not None: + with self.progress_lock: + self.progress_total += length + total = self.progress_total + self.progress_callback(total, self.download_size) + + def _write_to_stream(self, chunk_data, chunk_start): + with self.stream_lock: + self.stream.seek(self.stream_start + (chunk_start - self.start_index)) + self.stream.write(chunk_data) + + def _download_chunk(self, chunk_start, chunk_end): + response = self.blob_service._get_blob( + self.container_name, + self.blob_name, + snapshot=self.snapshot, + start_range=chunk_start, + end_range=chunk_end - 1, + validate_content=self.validate_content, + lease_id=self.lease_id, + if_modified_since=self.if_modified_since, + if_unmodified_since=self.if_unmodified_since, + if_match=self.if_match, + if_none_match=self.if_none_match, + timeout=self.timeout, + _context=self.operation_context + ) + + # This makes sure that if_match is set so that we can validate + # that subsequent downloads are to an unmodified blob + self.if_match = response.properties.etag + return response diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_encryption.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_encryption.py new file mode 100644 index 00000000000..f1e9b540b0b --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_encryption.py @@ -0,0 +1,187 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +from json import ( + dumps, + loads, +) +from os import urandom + +from cryptography.hazmat.primitives.padding import PKCS7 + +from ..common._encryption import ( + _generate_encryption_data_dict, + _generate_AES_CBC_cipher, + _dict_to_encryption_data, + _validate_and_unwrap_cek, + _EncryptionAlgorithm, +) +from ..common._error import ( + _validate_not_none, + _validate_key_encryption_key_wrap, + _ERROR_DATA_NOT_ENCRYPTED, + _ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM, +) + + +def _encrypt_blob(blob, key_encryption_key): + ''' + Encrypts the given blob using AES256 in CBC mode with 128 bit padding. + Wraps the generated content-encryption-key using the user-provided key-encryption-key (kek). + Returns a json-formatted string containing the encryption metadata. This method should + only be used when a blob is small enough for single shot upload. Encrypting larger blobs + is done as a part of the _upload_blob_chunks method. + + :param bytes blob: + The blob to be encrypted. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + wrap_key(key)--wraps the specified key using an algorithm of the user's choice. + get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key. + get_kid()--returns a string key id for this key-encryption-key. + :return: A tuple of json-formatted string containing the encryption metadata and the encrypted blob data. + :rtype: (str, bytes) + ''' + + _validate_not_none('blob', blob) + _validate_not_none('key_encryption_key', key_encryption_key) + _validate_key_encryption_key_wrap(key_encryption_key) + + # AES256 uses 256 bit (32 byte) keys and always with 16 byte blocks + content_encryption_key = urandom(32) + initialization_vector = urandom(16) + + cipher = _generate_AES_CBC_cipher(content_encryption_key, initialization_vector) + + # PKCS7 with 16 byte blocks ensures compatibility with AES. + padder = PKCS7(128).padder() + padded_data = padder.update(blob) + padder.finalize() + + # Encrypt the data. + encryptor = cipher.encryptor() + encrypted_data = encryptor.update(padded_data) + encryptor.finalize() + encryption_data = _generate_encryption_data_dict(key_encryption_key, content_encryption_key, + initialization_vector) + encryption_data['EncryptionMode'] = 'FullBlob' + + return dumps(encryption_data), encrypted_data + + +def _generate_blob_encryption_data(key_encryption_key): + ''' + Generates the encryption_metadata for the blob. + + :param bytes key_encryption_key: + The key-encryption-key used to wrap the cek associate with this blob. + :return: A tuple containing the cek and iv for this blob as well as the + serialized encryption metadata for the blob. + :rtype: (bytes, bytes, str) + ''' + encryption_data = None + content_encryption_key = None + initialization_vector = None + if key_encryption_key: + _validate_key_encryption_key_wrap(key_encryption_key) + content_encryption_key = urandom(32) + initialization_vector = urandom(16) + encryption_data = _generate_encryption_data_dict(key_encryption_key, + content_encryption_key, + initialization_vector) + encryption_data['EncryptionMode'] = 'FullBlob' + encryption_data = dumps(encryption_data) + + return content_encryption_key, initialization_vector, encryption_data + + +def _decrypt_blob(require_encryption, key_encryption_key, key_resolver, + response, start_offset, end_offset): + ''' + Decrypts the given blob contents and returns only the requested range. + + :param bool require_encryption: + Whether or not the calling blob service requires objects to be decrypted. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + wrap_key(key)--wraps the specified key using an algorithm of the user's choice. + get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key. + get_kid()--returns a string key id for this key-encryption-key. + :param key_resolver(kid): + The user-provided key resolver. Uses the kid string to return a key-encryption-key + implementing the interface defined above. + :return: The decrypted blob content. + :rtype: bytes + ''' + _validate_not_none('response', response) + content = response.body + _validate_not_none('content', content) + + try: + encryption_data = _dict_to_encryption_data(loads(response.headers['x-ms-meta-encryptiondata'])) + except: + if require_encryption: + raise ValueError(_ERROR_DATA_NOT_ENCRYPTED) + else: + return content + + if not (encryption_data.encryption_agent.encryption_algorithm == _EncryptionAlgorithm.AES_CBC_256): + raise ValueError(_ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM) + + blob_type = response.headers['x-ms-blob-type'] + + iv = None + unpad = False + start_range, end_range = 0, len(content) + if 'content-range' in response.headers: + content_range = response.headers['content-range'] + # Format: 'bytes x-y/size' + + # Ignore the word 'bytes' + content_range = content_range.split(' ') + + content_range = content_range[1].split('-') + start_range = int(content_range[0]) + content_range = content_range[1].split('/') + end_range = int(content_range[0]) + blob_size = int(content_range[1]) + + if start_offset >= 16: + iv = content[:16] + content = content[16:] + start_offset -= 16 + else: + iv = encryption_data.content_encryption_IV + + if end_range == blob_size - 1: + unpad = True + else: + unpad = True + iv = encryption_data.content_encryption_IV + + if blob_type == 'PageBlob': + unpad = False + + content_encryption_key = _validate_and_unwrap_cek(encryption_data, key_encryption_key, key_resolver) + cipher = _generate_AES_CBC_cipher(content_encryption_key, iv) + decryptor = cipher.decryptor() + + content = decryptor.update(content) + decryptor.finalize() + if unpad: + unpadder = PKCS7(128).unpadder() + content = unpadder.update(content) + unpadder.finalize() + + return content[start_offset: len(content) - end_offset] + + +def _get_blob_encryptor_and_padder(cek, iv, should_pad): + encryptor = None + padder = None + + if cek is not None and iv is not None: + cipher = _generate_AES_CBC_cipher(cek, iv) + encryptor = cipher.encryptor() + padder = PKCS7(128).padder() if should_pad else None + + return encryptor, padder diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_error.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_error.py new file mode 100644 index 00000000000..f24edc81377 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_error.py @@ -0,0 +1,29 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +_ERROR_PAGE_BLOB_SIZE_ALIGNMENT = \ + 'Invalid page blob size: {0}. ' + \ + 'The size must be aligned to a 512-byte boundary.' + +_ERROR_PAGE_BLOB_START_ALIGNMENT = \ + 'start_range must align with 512 page size' + +_ERROR_PAGE_BLOB_END_ALIGNMENT = \ + 'end_range must align with 512 page size' + +_ERROR_INVALID_BLOCK_ID = \ + 'All blocks in block list need to have valid block ids.' + +_ERROR_INVALID_LEASE_DURATION = \ + "lease_duration param needs to be between 15 and 60 or -1." + +_ERROR_INVALID_LEASE_BREAK_PERIOD = \ + "lease_break_period param needs to be between 0 and 60." + +_ERROR_NO_SINGLE_THREAD_CHUNKING = \ + 'To use blob chunk downloader more than 1 thread must be ' + \ + 'used since get_blob_to_bytes should be called for single threaded ' + \ + 'blob downloads.' diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_serialization.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_serialization.py new file mode 100644 index 00000000000..100b4089856 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_serialization.py @@ -0,0 +1,118 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from xml.sax.saxutils import escape as xml_escape + +try: + from xml.etree import cElementTree as ETree +except ImportError: + from xml.etree import ElementTree as ETree +from ..common._common_conversion import ( + _encode_base64, + _str, +) +from ..common._error import ( + _validate_not_none, + _ERROR_START_END_NEEDED_FOR_MD5, + _ERROR_RANGE_TOO_LARGE_FOR_MD5, +) +from ._error import ( + _ERROR_PAGE_BLOB_START_ALIGNMENT, + _ERROR_PAGE_BLOB_END_ALIGNMENT, + _ERROR_INVALID_BLOCK_ID, +) +from io import BytesIO + + +def _get_path(container_name=None, blob_name=None): + ''' + Creates the path to access a blob resource. + + container_name: + Name of container. + blob_name: + The path to the blob. + ''' + if container_name and blob_name: + return '/{0}/{1}'.format( + _str(container_name), + _str(blob_name)) + elif container_name: + return '/{0}'.format(_str(container_name)) + else: + return '/' + + +def _validate_and_format_range_headers(request, start_range, end_range, start_range_required=True, + end_range_required=True, check_content_md5=False, align_to_page=False): + # If end range is provided, start range must be provided + if start_range_required or end_range is not None: + _validate_not_none('start_range', start_range) + if end_range_required: + _validate_not_none('end_range', end_range) + + # Page ranges must be 512 aligned + if align_to_page: + if start_range is not None and start_range % 512 != 0: + raise ValueError(_ERROR_PAGE_BLOB_START_ALIGNMENT) + if end_range is not None and end_range % 512 != 511: + raise ValueError(_ERROR_PAGE_BLOB_END_ALIGNMENT) + + # Format based on whether end_range is present + request.headers = request.headers or {} + if end_range is not None: + request.headers['x-ms-range'] = 'bytes={0}-{1}'.format(start_range, end_range) + elif start_range is not None: + request.headers['x-ms-range'] = "bytes={0}-".format(start_range) + + # Content MD5 can only be provided for a complete range less than 4MB in size + if check_content_md5: + if start_range is None or end_range is None: + raise ValueError(_ERROR_START_END_NEEDED_FOR_MD5) + if end_range - start_range > 4 * 1024 * 1024: + raise ValueError(_ERROR_RANGE_TOO_LARGE_FOR_MD5) + + request.headers['x-ms-range-get-content-md5'] = 'true' + + +def _convert_block_list_to_xml(block_id_list): + ''' + + + first-base64-encoded-block-id + second-base64-encoded-block-id + third-base64-encoded-block-id + + + Convert a block list to xml to send. + + block_id_list: + A list of BlobBlock containing the block ids and block state that are used in put_block_list. + Only get block from latest blocks. + ''' + if block_id_list is None: + return '' + + block_list_element = ETree.Element('BlockList') + + # Enabled + for block in block_id_list: + if block.id is None: + raise ValueError(_ERROR_INVALID_BLOCK_ID) + id = xml_escape(_str(format(_encode_base64(block.id)))) + ETree.SubElement(block_list_element, block.state).text = id + + # Add xml declaration and serialize + try: + stream = BytesIO() + ETree.ElementTree(block_list_element).write(stream, xml_declaration=True, encoding='utf-8', method='xml') + except: + raise + finally: + output = stream.getvalue() + stream.close() + + # return xml value + return output diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_upload_chunking.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_upload_chunking.py new file mode 100644 index 00000000000..e73388b11d9 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/_upload_chunking.py @@ -0,0 +1,485 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from io import (BytesIO, IOBase, SEEK_CUR, SEEK_END, SEEK_SET, UnsupportedOperation) +from math import ceil +from threading import Lock + +from ..common._common_conversion import _encode_base64 +from ..common._error import _ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM +from ..common._serialization import ( + url_quote, + _get_data_bytes_only, + _len_plus +) +from ._encryption import ( + _get_blob_encryptor_and_padder, +) +from .models import BlobBlock +from ._constants import ( + _LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE +) + + +def _upload_blob_chunks(blob_service, container_name, blob_name, + blob_size, block_size, stream, max_connections, + progress_callback, validate_content, lease_id, uploader_class, + maxsize_condition=None, if_match=None, timeout=None, + content_encryption_key=None, initialization_vector=None, resource_properties=None): + encryptor, padder = _get_blob_encryptor_and_padder(content_encryption_key, initialization_vector, + uploader_class is not _PageBlobChunkUploader) + + uploader = uploader_class( + blob_service, + container_name, + blob_name, + blob_size, + block_size, + stream, + max_connections > 1, + progress_callback, + validate_content, + lease_id, + timeout, + encryptor, + padder + ) + + uploader.maxsize_condition = maxsize_condition + + # ETag matching does not work with parallelism as a ranged upload may start + # before the previous finishes and provides an etag + uploader.if_match = if_match if not max_connections > 1 else None + + if progress_callback is not None: + progress_callback(0, blob_size) + + if max_connections > 1: + import concurrent.futures + from threading import BoundedSemaphore + + ''' + Ensures we bound the chunking so we only buffer and submit 'max_connections' amount of work items to the executor. + This is necessary as the executor queue will keep accepting submitted work items, which results in buffering all the blocks if + the max_connections + 1 ensures the next chunk is already buffered and ready for when the worker thread is available. + ''' + chunk_throttler = BoundedSemaphore(max_connections + 1) + + executor = concurrent.futures.ThreadPoolExecutor(max_connections) + futures = [] + running_futures = [] + + # Check for exceptions and fail fast. + for chunk in uploader.get_chunk_streams(): + for f in running_futures: + if f.done(): + if f.exception(): + raise f.exception() + else: + running_futures.remove(f) + + chunk_throttler.acquire() + future = executor.submit(uploader.process_chunk, chunk) + + # Calls callback upon completion (even if the callback was added after the Future task is done). + future.add_done_callback(lambda x: chunk_throttler.release()) + futures.append(future) + running_futures.append(future) + + # result() will wait until completion and also raise any exceptions that may have been set. + range_ids = [f.result() for f in futures] + else: + range_ids = [uploader.process_chunk(result) for result in uploader.get_chunk_streams()] + + if resource_properties: + resource_properties.last_modified = uploader.last_modified + resource_properties.etag = uploader.etag + + return range_ids + + +def _upload_blob_substream_blocks(blob_service, container_name, blob_name, + blob_size, block_size, stream, max_connections, + progress_callback, validate_content, lease_id, uploader_class, + maxsize_condition=None, if_match=None, timeout=None): + uploader = uploader_class( + blob_service, + container_name, + blob_name, + blob_size, + block_size, + stream, + max_connections > 1, + progress_callback, + validate_content, + lease_id, + timeout, + None, + None + ) + + uploader.maxsize_condition = maxsize_condition + + # ETag matching does not work with parallelism as a ranged upload may start + # before the previous finishes and provides an etag + uploader.if_match = if_match if not max_connections > 1 else None + + if progress_callback is not None: + progress_callback(0, blob_size) + + if max_connections > 1: + import concurrent.futures + executor = concurrent.futures.ThreadPoolExecutor(max_connections) + range_ids = list(executor.map(uploader.process_substream_block, uploader.get_substream_blocks())) + else: + range_ids = [uploader.process_substream_block(result) for result in uploader.get_substream_blocks()] + + return range_ids + + +class _BlobChunkUploader(object): + def __init__(self, blob_service, container_name, blob_name, blob_size, + chunk_size, stream, parallel, progress_callback, + validate_content, lease_id, timeout, encryptor, padder): + self.blob_service = blob_service + self.container_name = container_name + self.blob_name = blob_name + self.blob_size = blob_size + self.chunk_size = chunk_size + self.stream = stream + self.parallel = parallel + self.stream_start = stream.tell() if parallel else None + self.stream_lock = Lock() if parallel else None + self.progress_callback = progress_callback + self.progress_total = 0 + self.progress_lock = Lock() if parallel else None + self.validate_content = validate_content + self.lease_id = lease_id + self.timeout = timeout + self.encryptor = encryptor + self.padder = padder + self.last_modified = None + self.etag = None + + def get_chunk_streams(self): + index = 0 + while True: + data = b'' + read_size = self.chunk_size + + # Buffer until we either reach the end of the stream or get a whole chunk. + while True: + if self.blob_size: + read_size = min(self.chunk_size - len(data), self.blob_size - (index + len(data))) + temp = self.stream.read(read_size) + temp = _get_data_bytes_only('temp', temp) + data += temp + + # We have read an empty string and so are at the end + # of the buffer or we have read a full chunk. + if temp == b'' or len(data) == self.chunk_size: + break + + if len(data) == self.chunk_size: + if self.padder: + data = self.padder.update(data) + if self.encryptor: + data = self.encryptor.update(data) + yield index, data + else: + if self.padder: + data = self.padder.update(data) + self.padder.finalize() + if self.encryptor: + data = self.encryptor.update(data) + self.encryptor.finalize() + if len(data) > 0: + yield index, data + break + index += len(data) + + def process_chunk(self, chunk_data): + chunk_bytes = chunk_data[1] + chunk_offset = chunk_data[0] + return self._upload_chunk_with_progress(chunk_offset, chunk_bytes) + + def _update_progress(self, length): + if self.progress_callback is not None: + if self.progress_lock is not None: + with self.progress_lock: + self.progress_total += length + total = self.progress_total + else: + self.progress_total += length + total = self.progress_total + self.progress_callback(total, self.blob_size) + + def _upload_chunk_with_progress(self, chunk_offset, chunk_data): + range_id = self._upload_chunk(chunk_offset, chunk_data) + self._update_progress(len(chunk_data)) + return range_id + + def get_substream_blocks(self): + assert self.chunk_size is not None + lock = self.stream_lock + blob_length = self.blob_size + + if blob_length is None: + blob_length = _len_plus(self.stream) + if blob_length is None: + raise ValueError(_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM.format('stream')) + + blocks = int(ceil(blob_length / (self.chunk_size * 1.0))) + last_block_size = self.chunk_size if blob_length % self.chunk_size == 0 else blob_length % self.chunk_size + + for i in range(blocks): + yield ('BlockId{}'.format("%05d" % i), + _SubStream(self.stream, i * self.chunk_size, last_block_size if i == blocks - 1 else self.chunk_size, + lock)) + + def process_substream_block(self, block_data): + return self._upload_substream_block_with_progress(block_data[0], block_data[1]) + + def _upload_substream_block_with_progress(self, block_id, block_stream): + range_id = self._upload_substream_block(block_id, block_stream) + self._update_progress(len(block_stream)) + return range_id + + def set_response_properties(self, resp): + self.etag = resp.etag + self.last_modified = resp.last_modified + + +class _BlockBlobChunkUploader(_BlobChunkUploader): + def _upload_chunk(self, chunk_offset, chunk_data): + block_id = url_quote(_encode_base64('{0:032d}'.format(chunk_offset))) + self.blob_service._put_block( + self.container_name, + self.blob_name, + chunk_data, + block_id, + validate_content=self.validate_content, + lease_id=self.lease_id, + timeout=self.timeout, + ) + return BlobBlock(block_id) + + def _upload_substream_block(self, block_id, block_stream): + try: + self.blob_service._put_block( + self.container_name, + self.blob_name, + block_stream, + block_id, + validate_content=self.validate_content, + lease_id=self.lease_id, + timeout=self.timeout, + ) + finally: + block_stream.close() + return BlobBlock(block_id) + + +class _PageBlobChunkUploader(_BlobChunkUploader): + def _is_chunk_empty(self, chunk_data): + # read until non-zero byte is encountered + # if reached the end without returning, then chunk_data is all 0's + for each_byte in chunk_data: + if each_byte != 0: + return False + return True + + def _upload_chunk(self, chunk_start, chunk_data): + # avoid uploading the empty pages + if not self._is_chunk_empty(chunk_data): + chunk_end = chunk_start + len(chunk_data) - 1 + resp = self.blob_service._update_page( + self.container_name, + self.blob_name, + chunk_data, + chunk_start, + chunk_end, + validate_content=self.validate_content, + lease_id=self.lease_id, + if_match=self.if_match, + timeout=self.timeout, + ) + + if not self.parallel: + self.if_match = resp.etag + + self.set_response_properties(resp) + + +class _AppendBlobChunkUploader(_BlobChunkUploader): + def _upload_chunk(self, chunk_offset, chunk_data): + if not hasattr(self, 'current_length'): + resp = self.blob_service.append_block( + self.container_name, + self.blob_name, + chunk_data, + validate_content=self.validate_content, + lease_id=self.lease_id, + maxsize_condition=self.maxsize_condition, + timeout=self.timeout, + ) + + self.current_length = resp.append_offset + else: + resp = self.blob_service.append_block( + self.container_name, + self.blob_name, + chunk_data, + validate_content=self.validate_content, + lease_id=self.lease_id, + maxsize_condition=self.maxsize_condition, + appendpos_condition=self.current_length + chunk_offset, + timeout=self.timeout, + ) + + self.set_response_properties(resp) + + +class _SubStream(IOBase): + def __init__(self, wrapped_stream, stream_begin_index, length, lockObj): + # Python 2.7: file-like objects created with open() typically support seek(), but are not + # derivations of io.IOBase and thus do not implement seekable(). + # Python > 3.0: file-like objects created with open() are derived from io.IOBase. + try: + # only the main thread runs this, so there's no need grabbing the lock + wrapped_stream.seek(0, SEEK_CUR) + except: + raise ValueError("Wrapped stream must support seek().") + + self._lock = lockObj + self._wrapped_stream = wrapped_stream + self._position = 0 + self._stream_begin_index = stream_begin_index + self._length = length + self._buffer = BytesIO() + + # we must avoid buffering more than necessary, and also not use up too much memory + # so the max buffer size is capped at 4MB + self._max_buffer_size = length if length < _LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE \ + else _LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE + self._current_buffer_start = 0 + self._current_buffer_size = 0 + + def __len__(self): + return self._length + + def close(self): + if self._buffer: + self._buffer.close() + self._wrapped_stream = None + IOBase.close(self) + + def fileno(self): + return self._wrapped_stream.fileno() + + def flush(self): + pass + + def read(self, n): + if self.closed: + raise ValueError("Stream is closed.") + + # adjust if out of bounds + if n + self._position >= self._length: + n = self._length - self._position + + # return fast + if n is 0 or self._buffer.closed: + return b'' + + # attempt first read from the read buffer and update position + read_buffer = self._buffer.read(n) + bytes_read = len(read_buffer) + bytes_remaining = n - bytes_read + self._position += bytes_read + + # repopulate the read buffer from the underlying stream to fulfill the request + # ensure the seek and read operations are done atomically (only if a lock is provided) + if bytes_remaining > 0: + with self._buffer: + # either read in the max buffer size specified on the class + # or read in just enough data for the current block/sub stream + current_max_buffer_size = min(self._max_buffer_size, self._length - self._position) + + # lock is only defined if max_connections > 1 (parallel uploads) + if self._lock: + with self._lock: + # reposition the underlying stream to match the start of the data to read + absolute_position = self._stream_begin_index + self._position + self._wrapped_stream.seek(absolute_position, SEEK_SET) + # If we can't seek to the right location, our read will be corrupted so fail fast. + if self._wrapped_stream.tell() != absolute_position: + raise IOError("Stream failed to seek to the desired location.") + buffer_from_stream = self._wrapped_stream.read(current_max_buffer_size) + else: + buffer_from_stream = self._wrapped_stream.read(current_max_buffer_size) + + if buffer_from_stream: + # update the buffer with new data from the wrapped stream + # we need to note down the start position and size of the buffer, in case seek is performed later + self._buffer = BytesIO(buffer_from_stream) + self._current_buffer_start = self._position + self._current_buffer_size = len(buffer_from_stream) + + # read the remaining bytes from the new buffer and update position + second_read_buffer = self._buffer.read(bytes_remaining) + read_buffer += second_read_buffer + self._position += len(second_read_buffer) + + return read_buffer + + def readable(self): + return True + + def readinto(self, b): + raise UnsupportedOperation + + def seek(self, offset, whence=0): + if whence is SEEK_SET: + start_index = 0 + elif whence is SEEK_CUR: + start_index = self._position + elif whence is SEEK_END: + start_index = self._length + offset = - offset + else: + raise ValueError("Invalid argument for the 'whence' parameter.") + + pos = start_index + offset + + if pos > self._length: + pos = self._length + elif pos < 0: + pos = 0 + + # check if buffer is still valid + # if not, drop buffer + if pos < self._current_buffer_start or pos >= self._current_buffer_start + self._current_buffer_size: + self._buffer.close() + self._buffer = BytesIO() + else: # if yes seek to correct position + delta = pos - self._current_buffer_start + self._buffer.seek(delta, SEEK_SET) + + self._position = pos + return pos + + def seekable(self): + return True + + def tell(self): + return self._position + + def write(self): + raise UnsupportedOperation + + def writelines(self): + raise UnsupportedOperation + + def writeable(self): + return False diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/appendblobservice.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/appendblobservice.py new file mode 100644 index 00000000000..7a83190bb7f --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/appendblobservice.py @@ -0,0 +1,556 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys +from os import path + +from ..common._common_conversion import ( + _to_str, + _int_to_str, + _datetime_to_utc_string, + _get_content_md5, +) +from ..common._constants import ( + SERVICE_HOST_BASE, + DEFAULT_PROTOCOL, +) +from ..common._error import ( + _validate_not_none, + _validate_type_bytes, + _validate_encryption_unsupported, + _ERROR_VALUE_NEGATIVE, +) +from ..common._http import HTTPRequest +from ..common._serialization import ( + _get_data_bytes_only, + _add_metadata_headers, +) +from ._deserialization import ( + _parse_append_block, + _parse_base_properties, +) +from ._serialization import ( + _get_path, +) +from ._upload_chunking import ( + _AppendBlobChunkUploader, + _upload_blob_chunks, +) +from .baseblobservice import BaseBlobService +from .models import ( + _BlobTypes, + ResourceProperties +) + +if sys.version_info >= (3,): + from io import BytesIO +else: + from cStringIO import StringIO as BytesIO + + +class AppendBlobService(BaseBlobService): + ''' + An append blob is comprised of blocks and is optimized for append operations. + When you modify an append blob, blocks are added to the end of the blob only, + via the append_block operation. Updating or deleting of existing blocks is not + supported. Unlike a block blob, an append blob does not expose its block IDs. + + Each block in an append blob can be a different size, up to a maximum of 4 MB, + and an append blob can include up to 50,000 blocks. The maximum size of an + append blob is therefore slightly more than 195 GB (4 MB X 50,000 blocks). + + :ivar int MAX_BLOCK_SIZE: + The size of the blocks put by append_blob_from_* methods. Smaller blocks + may be put if there is less data provided. The maximum block size the service + supports is 4MB. + ''' + MAX_BLOCK_SIZE = 4 * 1024 * 1024 + + def __init__(self, account_name=None, account_key=None, sas_token=None, is_emulated=False, + protocol=DEFAULT_PROTOCOL, endpoint_suffix=SERVICE_HOST_BASE, custom_domain=None, request_session=None, + connection_string=None, socket_timeout=None, token_credential=None): + ''' + :param str account_name: + The storage account name. This is used to authenticate requests + signed with an account key and to construct the storage endpoint. It + is required unless a connection string is given, or if a custom + domain is used with anonymous authentication. + :param str account_key: + The storage account key. This is used for shared key authentication. + If neither account key or sas token is specified, anonymous access + will be used. + :param str sas_token: + A shared access signature token to use to authenticate requests + instead of the account key. If account key and sas token are both + specified, account key will be used to sign. If neither are + specified, anonymous access will be used. + :param bool is_emulated: + Whether to use the emulator. Defaults to False. If specified, will + override all other parameters besides connection string and request + session. + :param str protocol: + The protocol to use for requests. Defaults to https. + :param str endpoint_suffix: + The host base component of the url, minus the account name. Defaults + to Azure (core.windows.net). Override this to use the China cloud + (core.chinacloudapi.cn). + :param str custom_domain: + The custom domain to use. This can be set in the Azure Portal. For + example, 'www.mydomain.com'. + :param requests.Session request_session: + The session object to use for http requests. + :param str connection_string: + If specified, this will override all other parameters besides + request session. See + http://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/ + for the connection string format. + :param int socket_timeout: + If specified, this will override the default socket timeout. The timeout specified is in seconds. + See DEFAULT_SOCKET_TIMEOUT in _constants.py for the default value. + :param token_credential: + A token credential used to authenticate HTTPS requests. The token value + should be updated before its expiration. + :type `~..common.TokenCredential` + ''' + self.blob_type = _BlobTypes.AppendBlob + super(AppendBlobService, self).__init__( + account_name, account_key, sas_token, is_emulated, protocol, endpoint_suffix, + custom_domain, request_session, connection_string, socket_timeout, token_credential) + + def create_blob(self, container_name, blob_name, content_settings=None, + metadata=None, lease_id=None, + if_modified_since=None, if_unmodified_since=None, + if_match=None, if_none_match=None, timeout=None): + ''' + Creates a blob or overrides an existing blob. Use if_none_match=* to + prevent overriding an existing blob. + + See create_blob_from_* for high level + functions that handle the creation and upload of large blobs with + automatic chunking and progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set blob properties. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to + perform the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Append Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = {'timeout': _int_to_str(timeout)} + request.headers = { + 'x-ms-blob-type': _to_str(self.blob_type), + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match) + } + _add_metadata_headers(metadata, request) + if content_settings is not None: + request.headers.update(content_settings._to_headers()) + + return self._perform_request(request, _parse_base_properties) + + def append_block(self, container_name, blob_name, block, + validate_content=False, maxsize_condition=None, + appendpos_condition=None, + lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Commits a new block of data to the end of an existing append blob. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param bytes block: + Content of the block in bytes. + :param bool validate_content: + If true, calculates an MD5 hash of the block content. The storage + service checks the hash of the content that has arrived + with the hash that was sent. This is primarily valuable for detecting + bitflips on the wire if using http instead of https as https (the default) + will already validate. Note that this MD5 hash is not stored with the + blob. + :param int maxsize_condition: + Optional conditional header. The max length in bytes permitted for + the append blob. If the Append Block operation would cause the blob + to exceed that limit or if the blob size is already greater than the + value specified in this header, the request will fail with + MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). + :param int appendpos_condition: + Optional conditional header, used only for the Append Block operation. + A number indicating the byte offset to compare. Append Block will + succeed only if the append position is equal to this number. If it + is not, the request will fail with the + AppendPositionConditionNotMet error + (HTTP status code 412 - Precondition Failed). + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: + ETag, last modified, append offset, and committed block count + properties for the updated Append Blob + :rtype: :class:`~azure.storage.blob.models.AppendBlockProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('block', block) + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'appendblock', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-blob-condition-maxsize': _to_str(maxsize_condition), + 'x-ms-blob-condition-appendpos': _to_str(appendpos_condition), + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match) + } + request.body = _get_data_bytes_only('block', block) + + if validate_content: + computed_md5 = _get_content_md5(request.body) + request.headers['Content-MD5'] = _to_str(computed_md5) + + return self._perform_request(request, _parse_append_block) + + # ----Convenience APIs---------------------------------------------- + + def append_blob_from_path( + self, container_name, blob_name, file_path, validate_content=False, + maxsize_condition=None, progress_callback=None, lease_id=None, timeout=None): + ''' + Appends to the content of an existing blob from a file path, with automatic + chunking and progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param str file_path: + Path of the file to upload as the blob content. + :param bool validate_content: + If true, calculates an MD5 hash for each chunk of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. + :param int maxsize_condition: + Optional conditional header. The max length in bytes permitted for + the append blob. If the Append Block operation would cause the blob + to exceed that limit or if the blob size is already greater than the + value specified in this header, the request will fail with + MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param str lease_id: + Required if the blob has an active lease. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: ETag and last modified properties for the Append Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('file_path', file_path) + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + count = path.getsize(file_path) + with open(file_path, 'rb') as stream: + return self.append_blob_from_stream( + container_name, + blob_name, + stream, + count=count, + validate_content=validate_content, + maxsize_condition=maxsize_condition, + progress_callback=progress_callback, + lease_id=lease_id, + timeout=timeout) + + def append_blob_from_bytes( + self, container_name, blob_name, blob, index=0, count=None, + validate_content=False, maxsize_condition=None, progress_callback=None, + lease_id=None, timeout=None): + ''' + Appends to the content of an existing blob from an array of bytes, with + automatic chunking and progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param bytes blob: + Content of blob as an array of bytes. + :param int index: + Start index in the array of bytes. + :param int count: + Number of bytes to upload. Set to None or negative value to upload + all bytes starting from index. + :param bool validate_content: + If true, calculates an MD5 hash for each chunk of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. + :param int maxsize_condition: + Optional conditional header. The max length in bytes permitted for + the append blob. If the Append Block operation would cause the blob + to exceed that limit or if the blob size is already greater than the + value specified in this header, the request will fail with + MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param str lease_id: + Required if the blob has an active lease. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: ETag and last modified properties for the Append Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('blob', blob) + _validate_not_none('index', index) + _validate_type_bytes('blob', blob) + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + if index < 0: + raise IndexError(_ERROR_VALUE_NEGATIVE.format('index')) + + if count is None or count < 0: + count = len(blob) - index + + stream = BytesIO(blob) + stream.seek(index) + + return self.append_blob_from_stream( + container_name, + blob_name, + stream, + count=count, + validate_content=validate_content, + maxsize_condition=maxsize_condition, + lease_id=lease_id, + progress_callback=progress_callback, + timeout=timeout) + + def append_blob_from_text( + self, container_name, blob_name, text, encoding='utf-8', + validate_content=False, maxsize_condition=None, progress_callback=None, + lease_id=None, timeout=None): + ''' + Appends to the content of an existing blob from str/unicode, with + automatic chunking and progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param str text: + Text to upload to the blob. + :param str encoding: + Python encoding to use to convert the text to bytes. + :param bool validate_content: + If true, calculates an MD5 hash for each chunk of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. + :param int maxsize_condition: + Optional conditional header. The max length in bytes permitted for + the append blob. If the Append Block operation would cause the blob + to exceed that limit or if the blob size is already greater than the + value specified in this header, the request will fail with + MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param str lease_id: + Required if the blob has an active lease. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: ETag and last modified properties for the Append Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('text', text) + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + if not isinstance(text, bytes): + _validate_not_none('encoding', encoding) + text = text.encode(encoding) + + return self.append_blob_from_bytes( + container_name, + blob_name, + text, + index=0, + count=len(text), + validate_content=validate_content, + maxsize_condition=maxsize_condition, + lease_id=lease_id, + progress_callback=progress_callback, + timeout=timeout) + + def append_blob_from_stream( + self, container_name, blob_name, stream, count=None, + validate_content=False, maxsize_condition=None, progress_callback=None, + lease_id=None, timeout=None): + ''' + Appends to the content of an existing blob from a file/stream, with + automatic chunking and progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param io.IOBase stream: + Opened stream to upload as the blob content. + :param int count: + Number of bytes to read from the stream. This is optional, but + should be supplied for optimal performance. + :param bool validate_content: + If true, calculates an MD5 hash for each chunk of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. + :param int maxsize_condition: + Conditional header. The max length in bytes permitted for + the append blob. If the Append Block operation would cause the blob + to exceed that limit or if the blob size is already greater than the + value specified in this header, the request will fail with + MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed). + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param str lease_id: + Required if the blob has an active lease. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: ETag and last modified properties for the Append Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('stream', stream) + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + # _upload_blob_chunks returns the block ids for block blobs so resource_properties + # is passed as a parameter to get the last_modified and etag for page and append blobs. + # this info is not needed for block_blobs since _put_block_list is called after which gets this info + resource_properties = ResourceProperties() + _upload_blob_chunks( + blob_service=self, + container_name=container_name, + blob_name=blob_name, + blob_size=count, + block_size=self.MAX_BLOCK_SIZE, + stream=stream, + max_connections=1, # upload not easily parallelizable + progress_callback=progress_callback, + validate_content=validate_content, + lease_id=lease_id, + uploader_class=_AppendBlobChunkUploader, + maxsize_condition=maxsize_condition, + timeout=timeout, + resource_properties=resource_properties + ) + + return resource_properties diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/baseblobservice.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/baseblobservice.py new file mode 100644 index 00000000000..804e7cb4155 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/baseblobservice.py @@ -0,0 +1,3246 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys +from abc import ABCMeta + +from azure.common import AzureHttpError + +from ..common._auth import ( + _StorageSASAuthentication, + _StorageSharedKeyAuthentication, + _StorageNoAuthentication, + _StorageTokenAuthentication, +) +from ..common._common_conversion import ( + _int_to_str, + _to_str, + _datetime_to_utc_string, +) +from ..common._connection import _ServiceParameters +from ..common._constants import ( + SERVICE_HOST_BASE, + DEFAULT_PROTOCOL, +) +from ..common._deserialization import ( + _convert_xml_to_service_properties, + _parse_metadata, + _parse_properties, + _convert_xml_to_service_stats, + _parse_length_from_content_range, +) +from ..common._error import ( + _dont_fail_not_exist, + _dont_fail_on_exist, + _validate_not_none, + _validate_decryption_required, + _validate_access_policies, + _ERROR_PARALLEL_NOT_SEEKABLE, +) +from ..common._http import HTTPRequest +from ..common._serialization import ( + _get_request_body, + _convert_signed_identifiers_to_xml, + _convert_service_properties_to_xml, + _add_metadata_headers, +) +from ..common.models import ( + Services, + ListGenerator, + _OperationContext, +) +from .sharedaccesssignature import ( + BlobSharedAccessSignature, +) +from ..common.storageclient import StorageClient +from ._deserialization import ( + _convert_xml_to_containers, + _parse_blob, + _convert_xml_to_blob_list, + _parse_container, + _parse_snapshot_blob, + _parse_lease, + _convert_xml_to_signed_identifiers_and_access, + _parse_base_properties, +) +from ._download_chunking import _download_blob_chunks +from ._error import ( + _ERROR_INVALID_LEASE_DURATION, + _ERROR_INVALID_LEASE_BREAK_PERIOD, +) +from ._serialization import ( + _get_path, + _validate_and_format_range_headers, +) +from .models import ( + BlobProperties, + _LeaseActions, + ContainerPermissions, + BlobPermissions, +) + +from ._constants import ( + X_MS_VERSION, + __version__ as package_version, +) + +if sys.version_info >= (3,): + from io import BytesIO +else: + from cStringIO import StringIO as BytesIO + + +class BaseBlobService(StorageClient): + ''' + This is the main class managing Blob resources. + + The Blob service stores text and binary data as blobs in the cloud. + The Blob service offers the following three resources: the storage account, + containers, and blobs. Within your storage account, containers provide a + way to organize sets of blobs. For more information please see: + https://msdn.microsoft.com/en-us/library/azure/ee691964.aspx + + :ivar int MAX_SINGLE_GET_SIZE: + The size of the first range get performed by get_blob_to_* methods if + max_connections is greater than 1. Less data will be returned if the + blob is smaller than this. + :ivar int MAX_CHUNK_GET_SIZE: + The size of subsequent range gets performed by get_blob_to_* methods if + max_connections is greater than 1 and the blob is larger than MAX_SINGLE_GET_SIZE. + Less data will be returned if the remainder of the blob is smaller than + this. If this is set to larger than 4MB, content_validation will throw an + error if enabled. However, if content_validation is not desired a size + greater than 4MB may be optimal. Setting this below 4MB is not recommended. + :ivar object key_encryption_key: + The key-encryption-key optionally provided by the user. If provided, will be used to + encrypt/decrypt in supported methods. + For methods requiring decryption, either the key_encryption_key OR the resolver must be provided. + If both are provided, the resolver will take precedence. + Must implement the following methods for APIs requiring encryption: + wrap_key(key)--wraps the specified key (bytes) using an algorithm of the user's choice. Returns the encrypted key as bytes. + get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key. + get_kid()--returns a string key id for this key-encryption-key. + Must implement the following methods for APIs requiring decryption: + unwrap_key(key, algorithm)--returns the unwrapped form of the specified symmetric key using the string-specified algorithm. + get_kid()--returns a string key id for this key-encryption-key. + :ivar function key_resolver_function(kid): + A function to resolve keys optionally provided by the user. If provided, will be used to decrypt in supported methods. + For methods requiring decryption, either the key_encryption_key OR + the resolver must be provided. If both are provided, the resolver will take precedence. + It uses the kid string to return a key-encryption-key implementing the interface defined above. + :ivar bool require_encryption: + A flag that may be set to ensure that all messages successfully uploaded to the queue and all those downloaded and + successfully read from the queue are/were encrypted while on the server. If this flag is set, all required + parameters for encryption/decryption must be provided. See the above comments on the key_encryption_key and resolver. + ''' + + __metaclass__ = ABCMeta + MAX_SINGLE_GET_SIZE = 32 * 1024 * 1024 + MAX_CHUNK_GET_SIZE = 4 * 1024 * 1024 + + def __init__(self, account_name=None, account_key=None, sas_token=None, is_emulated=False, + protocol=DEFAULT_PROTOCOL, endpoint_suffix=SERVICE_HOST_BASE, custom_domain=None, request_session=None, + connection_string=None, socket_timeout=None, token_credential=None): + ''' + :param str account_name: + The storage account name. This is used to authenticate requests + signed with an account key and to construct the storage endpoint. It + is required unless a connection string is given, or if a custom + domain is used with anonymous authentication. + :param str account_key: + The storage account key. This is used for shared key authentication. + If neither account key or sas token is specified, anonymous access + will be used. + :param str sas_token: + A shared access signature token to use to authenticate requests + instead of the account key. If account key and sas token are both + specified, account key will be used to sign. If neither are + specified, anonymous access will be used. + :param bool is_emulated: + Whether to use the emulator. Defaults to False. If specified, will + override all other parameters besides connection string and request + session. + :param str protocol: + The protocol to use for requests. Defaults to https. + :param str endpoint_suffix: + The host base component of the url, minus the account name. Defaults + to Azure (core.windows.net). Override this to use the China cloud + (core.chinacloudapi.cn). + :param str custom_domain: + The custom domain to use. This can be set in the Azure Portal. For + example, 'www.mydomain.com'. + :param requests.Session request_session: + The session object to use for http requests. + :param str connection_string: + If specified, this will override all other parameters besides + request session. See + http://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/ + for the connection string format + :param int socket_timeout: + If specified, this will override the default socket timeout. The timeout specified is in seconds. + See DEFAULT_SOCKET_TIMEOUT in _constants.py for the default value. + :param token_credential: + A token credential used to authenticate HTTPS requests. The token value + should be updated before its expiration. + :type `~..common.TokenCredential` + ''' + service_params = _ServiceParameters.get_service_parameters( + 'blob', + account_name=account_name, + account_key=account_key, + sas_token=sas_token, + token_credential=token_credential, + is_emulated=is_emulated, + protocol=protocol, + endpoint_suffix=endpoint_suffix, + custom_domain=custom_domain, + request_session=request_session, + connection_string=connection_string, + socket_timeout=socket_timeout) + + super(BaseBlobService, self).__init__(service_params) + + if self.account_key: + self.authentication = _StorageSharedKeyAuthentication( + self.account_name, + self.account_key, + self.is_emulated + ) + elif self.sas_token: + self.authentication = _StorageSASAuthentication(self.sas_token) + elif self.token_credential: + self.authentication = _StorageTokenAuthentication(self.token_credential) + else: + self.authentication = _StorageNoAuthentication() + + self.require_encryption = False + self.key_encryption_key = None + self.key_resolver_function = None + self._X_MS_VERSION = X_MS_VERSION + self._update_user_agent_string(package_version) + + def make_blob_url(self, container_name, blob_name, protocol=None, sas_token=None, snapshot=None): + ''' + Creates the url to access a blob. + + :param str container_name: + Name of container. + :param str blob_name: + Name of blob. + :param str protocol: + Protocol to use: 'http' or 'https'. If not specified, uses the + protocol specified when BaseBlobService was initialized. + :param str sas_token: + Shared access signature token created with + generate_shared_access_signature. + :param str snapshot: + An string value that uniquely identifies the snapshot. The value of + this query parameter indicates the snapshot version. + :return: blob access URL. + :rtype: str + ''' + + url = '{}://{}/{}/{}'.format( + protocol or self.protocol, + self.primary_endpoint, + container_name, + blob_name, + ) + + if snapshot and sas_token: + url = '{}?snapshot={}&{}'.format(url, snapshot, sas_token) + elif snapshot: + url = '{}?snapshot={}'.format(url, snapshot) + elif sas_token: + url = '{}?{}'.format(url, sas_token) + + return url + + def make_container_url(self, container_name, protocol=None, sas_token=None): + ''' + Creates the url to access a container. + + :param str container_name: + Name of container. + :param str protocol: + Protocol to use: 'http' or 'https'. If not specified, uses the + protocol specified when BaseBlobService was initialized. + :param str sas_token: + Shared access signature token created with + generate_shared_access_signature. + :return: container access URL. + :rtype: str + ''' + + url = '{}://{}/{}?restype=container'.format( + protocol or self.protocol, + self.primary_endpoint, + container_name, + ) + + if sas_token: + url = '{}&{}'.format(url, sas_token) + + return url + + def generate_account_shared_access_signature(self, resource_types, permission, + expiry, start=None, ip=None, protocol=None): + ''' + Generates a shared access signature for the blob service. + Use the returned signature with the sas_token parameter of any BlobService. + + :param ResourceTypes resource_types: + Specifies the resource types that are accessible with the account SAS. + :param AccountPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + :return: A Shared Access Signature (sas) token. + :rtype: str + ''' + _validate_not_none('self.account_name', self.account_name) + _validate_not_none('self.account_key', self.account_key) + + sas = BlobSharedAccessSignature(self.account_name, self.account_key) + return sas.generate_account(Services.BLOB, resource_types, permission, + expiry, start=start, ip=ip, protocol=protocol) + + def generate_container_shared_access_signature(self, container_name, + permission=None, expiry=None, + start=None, id=None, ip=None, protocol=None, + cache_control=None, content_disposition=None, + content_encoding=None, content_language=None, + content_type=None): + ''' + Generates a shared access signature for the container. + Use the returned signature with the sas_token parameter of any BlobService. + + :param str container_name: + Name of container. + :param ContainerPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use + set_blob_service_properties. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + :return: A Shared Access Signature (sas) token. + :rtype: str + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('self.account_name', self.account_name) + _validate_not_none('self.account_key', self.account_key) + + sas = BlobSharedAccessSignature(self.account_name, self.account_key) + return sas.generate_container( + container_name, + permission, + expiry, + start=start, + id=id, + ip=ip, + protocol=protocol, + cache_control=cache_control, + content_disposition=content_disposition, + content_encoding=content_encoding, + content_language=content_language, + content_type=content_type, + ) + + def generate_blob_shared_access_signature( + self, container_name, blob_name, permission=None, + expiry=None, start=None, id=None, ip=None, protocol=None, + cache_control=None, content_disposition=None, + content_encoding=None, content_language=None, + content_type=None): + ''' + Generates a shared access signature for the blob. + Use the returned signature with the sas_token parameter of any BlobService. + + :param str container_name: + Name of container. + :param str blob_name: + Name of blob. + :param BlobPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use :func:`~set_container_acl`. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + :return: A Shared Access Signature (sas) token. + :rtype: str + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('self.account_name', self.account_name) + _validate_not_none('self.account_key', self.account_key) + + sas = BlobSharedAccessSignature(self.account_name, self.account_key) + return sas.generate_blob( + container_name, + blob_name, + permission, + expiry, + start=start, + id=id, + ip=ip, + protocol=protocol, + cache_control=cache_control, + content_disposition=content_disposition, + content_encoding=content_encoding, + content_language=content_language, + content_type=content_type, + ) + + def list_containers(self, prefix=None, num_results=None, include_metadata=False, + marker=None, timeout=None): + ''' + Returns a generator to list the containers under the specified account. + The generator will lazily follow the continuation tokens returned by + the service and stop when all containers have been returned or num_results is reached. + + If num_results is specified and the account has more than that number of + containers, the generator will have a populated next_marker field once it + finishes. This marker can be used to create a new generator if more + results are desired. + + :param str prefix: + Filters the results to return only containers whose names + begin with the specified prefix. + :param int num_results: + Specifies the maximum number of containers to return. A single list + request may return up to 1000 contianers and potentially a continuation + token which should be followed to get additional resutls. + :param bool include_metadata: + Specifies that container metadata be returned in the response. + :param str marker: + An opaque continuation token. This value can be retrieved from the + next_marker field of a previous generator object if num_results was + specified and that generator has finished enumerating results. If + specified, this generator will begin returning results from the point + where the previous generator stopped. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + include = 'metadata' if include_metadata else None + operation_context = _OperationContext(location_lock=True) + kwargs = {'prefix': prefix, 'marker': marker, 'max_results': num_results, + 'include': include, 'timeout': timeout, '_context': operation_context} + resp = self._list_containers(**kwargs) + + return ListGenerator(resp, self._list_containers, (), kwargs) + + def _list_containers(self, prefix=None, marker=None, max_results=None, + include=None, timeout=None, _context=None): + ''' + Returns a list of the containers under the specified account. + + :param str prefix: + Filters the results to return only containers whose names + begin with the specified prefix. + :param str marker: + A string value that identifies the portion of the list + to be returned with the next list operation. The operation returns + a next_marker value within the response body if the list returned was + not complete. The marker value may then be used in a subsequent + call to request the next set of list items. The marker value is + opaque to the client. + :param int max_results: + Specifies the maximum number of containers to return. A single list + request may return up to 1000 contianers and potentially a continuation + token which should be followed to get additional resutls. + :param str include: + Include this parameter to specify that the container's + metadata be returned as part of the response body. set this + parameter to string 'metadata' to get container's metadata. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path() + request.query = { + 'comp': 'list', + 'prefix': _to_str(prefix), + 'marker': _to_str(marker), + 'maxresults': _int_to_str(max_results), + 'include': _to_str(include), + 'timeout': _int_to_str(timeout) + } + + return self._perform_request(request, _convert_xml_to_containers, operation_context=_context) + + def create_container(self, container_name, metadata=None, + public_access=None, fail_on_exist=False, timeout=None): + ''' + Creates a new container under the specified account. If the container + with the same name already exists, the operation fails if + fail_on_exist is True. + + :param str container_name: + Name of container to create. + :param metadata: + A dict with name_value pairs to associate with the + container as metadata. Example:{'Category':'test'} + :type metadata: dict(str, str) + :param ~azure.storage.blob.models.PublicAccess public_access: + Possible values include: container, blob. + :param bool fail_on_exist: + Specify whether to throw an exception when the container exists. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: True if container is created, False if container already exists. + :rtype: bool + ''' + _validate_not_none('container_name', container_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name) + request.query = { + 'restype': 'container', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-blob-public-access': _to_str(public_access) + } + _add_metadata_headers(metadata, request) + + if not fail_on_exist: + try: + self._perform_request(request) + return True + except AzureHttpError as ex: + _dont_fail_on_exist(ex) + return False + else: + self._perform_request(request) + return True + + def get_container_properties(self, container_name, lease_id=None, timeout=None): + ''' + Returns all user-defined metadata and system properties for the specified + container. The data returned does not include the container's list of blobs. + + :param str container_name: + Name of existing container. + :param str lease_id: + If specified, get_container_properties only succeeds if the + container's lease is active and matches this ID. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: properties for the specified container within a container object. + :rtype: :class:`~azure.storage.blob.models.Container` + ''' + _validate_not_none('container_name', container_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name) + request.query = { + 'restype': 'container', + 'timeout': _int_to_str(timeout), + } + request.headers = {'x-ms-lease-id': _to_str(lease_id)} + + return self._perform_request(request, _parse_container, [container_name]) + + def get_container_metadata(self, container_name, lease_id=None, timeout=None): + ''' + Returns all user-defined metadata for the specified container. + + :param str container_name: + Name of existing container. + :param str lease_id: + If specified, get_container_metadata only succeeds if the + container's lease is active and matches this ID. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: + A dictionary representing the container metadata name, value pairs. + :rtype: dict(str, str) + ''' + _validate_not_none('container_name', container_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name) + request.query = { + 'restype': 'container', + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + } + request.headers = {'x-ms-lease-id': _to_str(lease_id)} + + return self._perform_request(request, _parse_metadata) + + def set_container_metadata(self, container_name, metadata=None, + lease_id=None, if_modified_since=None, timeout=None): + ''' + Sets one or more user-defined name-value pairs for the specified + container. Each call to this operation replaces all existing metadata + attached to the container. To remove all metadata from the container, + call this operation with no metadata dict. + + :param str container_name: + Name of existing container. + :param metadata: + A dict containing name-value pairs to associate with the container as + metadata. Example: {'category':'test'} + :type metadata: dict(str, str) + :param str lease_id: + If specified, set_container_metadata only succeeds if the + container's lease is active and matches this ID. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Container + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name) + request.query = { + 'restype': 'container', + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'x-ms-lease-id': _to_str(lease_id), + } + _add_metadata_headers(metadata, request) + + return self._perform_request(request, _parse_base_properties) + + def get_container_acl(self, container_name, lease_id=None, timeout=None): + ''' + Gets the permissions for the specified container. + The permissions indicate whether container data may be accessed publicly. + + :param str container_name: + Name of existing container. + :param lease_id: + If specified, get_container_acl only succeeds if the + container's lease is active and matches this ID. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: A dictionary of access policies associated with the container. dict of str to + :class:`..common.models.AccessPolicy` and a public_access property + if public access is turned on + ''' + _validate_not_none('container_name', container_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name) + request.query = { + 'restype': 'container', + 'comp': 'acl', + 'timeout': _int_to_str(timeout), + } + request.headers = {'x-ms-lease-id': _to_str(lease_id)} + + return self._perform_request(request, _convert_xml_to_signed_identifiers_and_access) + + def set_container_acl(self, container_name, signed_identifiers=None, + public_access=None, lease_id=None, + if_modified_since=None, if_unmodified_since=None, timeout=None): + ''' + Sets the permissions for the specified container or stored access + policies that may be used with Shared Access Signatures. The permissions + indicate whether blobs in a container may be accessed publicly. + + :param str container_name: + Name of existing container. + :param signed_identifiers: + A dictionary of access policies to associate with the container. The + dictionary may contain up to 5 elements. An empty dictionary + will clear the access policies set on the service. + :type signed_identifiers: dict(str, :class:`~..common.models.AccessPolicy`) + :param ~azure.storage.blob.models.PublicAccess public_access: + Possible values include: container, blob. + :param str lease_id: + If specified, set_container_acl only succeeds if the + container's lease is active and matches this ID. + :param datetime if_modified_since: + A datetime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified date/time. + :param datetime if_unmodified_since: + A datetime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Container + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_access_policies(signed_identifiers) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name) + request.query = { + 'restype': 'container', + 'comp': 'acl', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-blob-public-access': _to_str(public_access), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'x-ms-lease-id': _to_str(lease_id), + } + request.body = _get_request_body( + _convert_signed_identifiers_to_xml(signed_identifiers)) + + return self._perform_request(request, _parse_base_properties) + + def delete_container(self, container_name, fail_not_exist=False, + lease_id=None, if_modified_since=None, + if_unmodified_since=None, timeout=None): + ''' + Marks the specified container for deletion. The container and any blobs + contained within it are later deleted during garbage collection. + + :param str container_name: + Name of container to delete. + :param bool fail_not_exist: + Specify whether to throw an exception when the container doesn't + exist. + :param str lease_id: + If specified, delete_container only succeeds if the + container's lease is active and matches this ID. + Required if the container has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: True if container is deleted, False container doesn't exist. + :rtype: bool + ''' + _validate_not_none('container_name', container_name) + request = HTTPRequest() + request.method = 'DELETE' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name) + request.query = { + 'restype': 'container', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + } + + if not fail_not_exist: + try: + self._perform_request(request) + return True + except AzureHttpError as ex: + _dont_fail_not_exist(ex) + return False + else: + self._perform_request(request) + return True + + def _lease_container_impl( + self, container_name, lease_action, lease_id, lease_duration, + lease_break_period, proposed_lease_id, if_modified_since, + if_unmodified_since, timeout): + ''' + Establishes and manages a lease on a container. + The Lease Container operation can be called in one of five modes + Acquire, to request a new lease + Renew, to renew an existing lease + Change, to change the ID of an existing lease + Release, to free the lease if it is no longer needed so that another + client may immediately acquire a lease against the container + Break, to end the lease but ensure that another client cannot acquire + a new lease until the current lease period has expired + + :param str container_name: + Name of existing container. + :param str lease_action: + Possible _LeaseActions values: acquire|renew|release|break|change + :param str lease_id: + Required if the container has an active lease. + :param int lease_duration: + Specifies the duration of the lease, in seconds, or negative one + (-1) for a lease that never expires. A non-infinite lease can be + between 15 and 60 seconds. A lease duration cannot be changed + using renew or change. For backwards compatibility, the default is + 60, and the value is only used on an acquire operation. + :param int lease_break_period: + For a break operation, this is the proposed duration of + seconds that the lease should continue before it is broken, between + 0 and 60 seconds. This break period is only used if it is shorter + than the time remaining on the lease. If longer, the time remaining + on the lease is used. A new lease will not be available before the + break period has expired, but the lease may be held for longer than + the break period. If this header does not appear with a break + operation, a fixed-duration lease breaks after the remaining lease + period elapses, and an infinite lease breaks immediately. + :param str proposed_lease_id: + Optional for Acquire, required for Change. Proposed lease ID, in a + GUID string format. The Blob service returns 400 (Invalid request) + if the proposed lease ID is not in the correct format. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: + Response headers returned from the service call. + :rtype: dict(str, str) + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('lease_action', lease_action) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name) + request.query = { + 'restype': 'container', + 'comp': 'lease', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'x-ms-lease-action': _to_str(lease_action), + 'x-ms-lease-duration': _to_str(lease_duration), + 'x-ms-lease-break-period': _to_str(lease_break_period), + 'x-ms-proposed-lease-id': _to_str(proposed_lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + } + + return self._perform_request(request, _parse_lease) + + def acquire_container_lease( + self, container_name, lease_duration=-1, proposed_lease_id=None, + if_modified_since=None, if_unmodified_since=None, timeout=None): + ''' + Requests a new lease. If the container does not have an active lease, + the Blob service creates a lease on the container and returns a new + lease ID. + + :param str container_name: + Name of existing container. + :param int lease_duration: + Specifies the duration of the lease, in seconds, or negative one + (-1) for a lease that never expires. A non-infinite lease can be + between 15 and 60 seconds. A lease duration cannot be changed + using renew or change. Default is -1 (infinite lease). + :param str proposed_lease_id: + Proposed lease ID, in a GUID string format. The Blob service returns + 400 (Invalid request) if the proposed lease ID is not in the correct format. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: the lease ID of the newly created lease. + :return: str + ''' + _validate_not_none('lease_duration', lease_duration) + if lease_duration is not -1 and \ + (lease_duration < 15 or lease_duration > 60): + raise ValueError(_ERROR_INVALID_LEASE_DURATION) + + lease = self._lease_container_impl(container_name, + _LeaseActions.Acquire, + None, # lease_id + lease_duration, + None, # lease_break_period + proposed_lease_id, + if_modified_since, + if_unmodified_since, + timeout) + return lease['id'] + + def renew_container_lease( + self, container_name, lease_id, if_modified_since=None, + if_unmodified_since=None, timeout=None): + ''' + Renews the lease. The lease can be renewed if the lease ID specified + matches that associated with the container. Note that + the lease may be renewed even if it has expired as long as the container + has not been leased again since the expiration of that lease. When you + renew a lease, the lease duration clock resets. + + :param str container_name: + Name of existing container. + :param str lease_id: + Lease ID for active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: the lease ID of the renewed lease. + :return: str + ''' + _validate_not_none('lease_id', lease_id) + + lease = self._lease_container_impl(container_name, + _LeaseActions.Renew, + lease_id, + None, # lease_duration + None, # lease_break_period + None, # proposed_lease_id + if_modified_since, + if_unmodified_since, + timeout) + return lease['id'] + + def release_container_lease( + self, container_name, lease_id, if_modified_since=None, + if_unmodified_since=None, timeout=None): + ''' + Release the lease. The lease may be released if the lease_id specified matches + that associated with the container. Releasing the lease allows another client + to immediately acquire the lease for the container as soon as the release is complete. + + :param str container_name: + Name of existing container. + :param str lease_id: + Lease ID for active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('lease_id', lease_id) + + self._lease_container_impl(container_name, + _LeaseActions.Release, + lease_id, + None, # lease_duration + None, # lease_break_period + None, # proposed_lease_id + if_modified_since, + if_unmodified_since, + timeout) + + def break_container_lease( + self, container_name, lease_break_period=None, + if_modified_since=None, if_unmodified_since=None, timeout=None): + ''' + Break the lease, if the container has an active lease. Once a lease is + broken, it cannot be renewed. Any authorized request can break the lease; + the request is not required to specify a matching lease ID. When a lease + is broken, the lease break period is allowed to elapse, during which time + no lease operation except break and release can be performed on the container. + When a lease is successfully broken, the response indicates the interval + in seconds until a new lease can be acquired. + + :param str container_name: + Name of existing container. + :param int lease_break_period: + This is the proposed duration of seconds that the lease + should continue before it is broken, between 0 and 60 seconds. This + break period is only used if it is shorter than the time remaining + on the lease. If longer, the time remaining on the lease is used. + A new lease will not be available before the break period has + expired, but the lease may be held for longer than the break + period. If this header does not appear with a break + operation, a fixed-duration lease breaks after the remaining lease + period elapses, and an infinite lease breaks immediately. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: Approximate time remaining in the lease period, in seconds. + :return: int + ''' + if (lease_break_period is not None) and (lease_break_period < 0 or lease_break_period > 60): + raise ValueError(_ERROR_INVALID_LEASE_BREAK_PERIOD) + + lease = self._lease_container_impl(container_name, + _LeaseActions.Break, + None, # lease_id + None, # lease_duration + lease_break_period, + None, # proposed_lease_id + if_modified_since, + if_unmodified_since, + timeout) + return lease['time'] + + def change_container_lease( + self, container_name, lease_id, proposed_lease_id, + if_modified_since=None, if_unmodified_since=None, timeout=None): + ''' + Change the lease ID of an active lease. A change must include the current + lease ID and a new lease ID. + + :param str container_name: + Name of existing container. + :param str lease_id: + Lease ID for active lease. + :param str proposed_lease_id: + Proposed lease ID, in a GUID string format. The Blob service returns 400 + (Invalid request) if the proposed lease ID is not in the correct format. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('lease_id', lease_id) + + self._lease_container_impl(container_name, + _LeaseActions.Change, + lease_id, + None, # lease_duration + None, # lease_break_period + proposed_lease_id, + if_modified_since, + if_unmodified_since, + timeout) + + def list_blobs(self, container_name, prefix=None, num_results=None, include=None, + delimiter=None, marker=None, timeout=None): + ''' + Returns a generator to list the blobs under the specified container. + The generator will lazily follow the continuation tokens returned by + the service and stop when all blobs have been returned or num_results is reached. + + If num_results is specified and the account has more than that number of + blobs, the generator will have a populated next_marker field once it + finishes. This marker can be used to create a new generator if more + results are desired. + + :param str container_name: + Name of existing container. + :param str prefix: + Filters the results to return only blobs whose names + begin with the specified prefix. + :param int num_results: + Specifies the maximum number of blobs to return, + including all :class:`BlobPrefix` elements. If the request does not specify + num_results or specifies a value greater than 5,000, the server will + return up to 5,000 items. Setting num_results to a value less than + or equal to zero results in error response code 400 (Bad Request). + :param ~azure.storage.blob.models.Include include: + Specifies one or more additional datasets to include in the response. + :param str delimiter: + When the request includes this parameter, the operation + returns a :class:`~azure.storage.blob.models.BlobPrefix` element in the + result list that acts as a placeholder for all blobs whose names begin + with the same substring up to the appearance of the delimiter character. + The delimiter may be a single character or a string. + :param str marker: + An opaque continuation token. This value can be retrieved from the + next_marker field of a previous generator object if num_results was + specified and that generator has finished enumerating results. If + specified, this generator will begin returning results from the point + where the previous generator stopped. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + operation_context = _OperationContext(location_lock=True) + args = (container_name,) + kwargs = {'prefix': prefix, 'marker': marker, 'max_results': num_results, + 'include': include, 'delimiter': delimiter, 'timeout': timeout, + '_context': operation_context} + resp = self._list_blobs(*args, **kwargs) + + return ListGenerator(resp, self._list_blobs, args, kwargs) + + def _list_blobs(self, container_name, prefix=None, marker=None, + max_results=None, include=None, delimiter=None, timeout=None, + _context=None): + ''' + Returns the list of blobs under the specified container. + + :param str container_name: + Name of existing container. + :parm str prefix: + Filters the results to return only blobs whose names + begin with the specified prefix. + :param str marker: + A string value that identifies the portion of the list + to be returned with the next list operation. The operation returns + a next_marker value within the response body if the list returned was + not complete. The marker value may then be used in a subsequent + call to request the next set of list items. The marker value is + opaque to the client. + :param int max_results: + Specifies the maximum number of blobs to return, + including all :class:`~azure.storage.blob.models.BlobPrefix` elements. If the request does not specify + max_results or specifies a value greater than 5,000, the server will + return up to 5,000 items. Setting max_results to a value less than + or equal to zero results in error response code 400 (Bad Request). + :param str include: + Specifies one or more datasets to include in the + response. To specify more than one of these options on the URI, + you must separate each option with a comma. Valid values are: + snapshots: + Specifies that snapshots should be included in the + enumeration. Snapshots are listed from oldest to newest in + the response. + metadata: + Specifies that blob metadata be returned in the response. + uncommittedblobs: + Specifies that blobs for which blocks have been uploaded, + but which have not been committed using Put Block List + (REST API), be included in the response. + copy: + Version 2012-02-12 and newer. Specifies that metadata + related to any current or previous Copy Blob operation + should be included in the response. + deleted: + Version 2017-07-29 and newer. Specifies that soft deleted blobs + which are retained by the service should be included + in the response. + :param str delimiter: + When the request includes this parameter, the operation + returns a :class:`~azure.storage.blob.models.BlobPrefix` element in the response body that acts as a + placeholder for all blobs whose names begin with the same + substring up to the appearance of the delimiter character. The + delimiter may be a single character or a string. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('container_name', container_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name) + request.query = { + 'restype': 'container', + 'comp': 'list', + 'prefix': _to_str(prefix), + 'delimiter': _to_str(delimiter), + 'marker': _to_str(marker), + 'maxresults': _int_to_str(max_results), + 'include': _to_str(include), + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_blob_list, operation_context=_context) + + def get_blob_service_stats(self, timeout=None): + ''' + Retrieves statistics related to replication for the Blob service. It is + only available when read-access geo-redundant replication is enabled for + the storage account. + + With geo-redundant replication, Azure Storage maintains your data durable + in two locations. In both locations, Azure Storage constantly maintains + multiple healthy replicas of your data. The location where you read, + create, update, or delete data is the primary storage account location. + The primary location exists in the region you choose at the time you + create an account via the Azure Management Azure classic portal, for + example, North Central US. The location to which your data is replicated + is the secondary location. The secondary location is automatically + determined based on the location of the primary; it is in a second data + center that resides in the same region as the primary location. Read-only + access is available from the secondary location, if read-access geo-redundant + replication is enabled for your storage account. + + :param int timeout: + The timeout parameter is expressed in seconds. + :return: The blob service stats. + :rtype: :class:`~..common.models.ServiceStats` + ''' + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(primary=False, secondary=True) + request.path = _get_path() + request.query = { + 'restype': 'service', + 'comp': 'stats', + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_service_stats) + + def set_blob_service_properties( + self, logging=None, hour_metrics=None, minute_metrics=None, + cors=None, target_version=None, timeout=None, delete_retention_policy=None): + ''' + Sets the properties of a storage account's Blob service, including + Azure Storage Analytics. If an element (ex Logging) is left as None, the + existing settings on the service for that functionality are preserved. + + :param logging: + Groups the Azure Analytics Logging settings. + :type logging: + :class:`~..common.models.Logging` + :param hour_metrics: + The hour metrics settings provide a summary of request + statistics grouped by API in hourly aggregates for blobs. + :type hour_metrics: + :class:`~..common.models.Metrics` + :param minute_metrics: + The minute metrics settings provide request statistics + for each minute for blobs. + :type minute_metrics: + :class:`~..common.models.Metrics` + :param cors: + You can include up to five CorsRule elements in the + list. If an empty list is specified, all CORS rules will be deleted, + and CORS will be disabled for the service. + :type cors: list(:class:`~..common.models.CorsRule`) + :param str target_version: + Indicates the default version to use for requests if an incoming + request's version is not specified. + :param int timeout: + The timeout parameter is expressed in seconds. + :param delete_retention_policy: + The delete retention policy specifies whether to retain deleted blobs. + It also specifies the number of days and versions of blob to keep. + :type delete_retention_policy: + :class:`~..common.models.DeleteRetentionPolicy` + ''' + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path() + request.query = { + 'restype': 'service', + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + request.body = _get_request_body( + _convert_service_properties_to_xml(logging, hour_metrics, minute_metrics, + cors, target_version, delete_retention_policy)) + + self._perform_request(request) + + def get_blob_service_properties(self, timeout=None): + ''' + Gets the properties of a storage account's Blob service, including + Azure Storage Analytics. + + :param int timeout: + The timeout parameter is expressed in seconds. + :return: The blob :class:`~..common.models.ServiceProperties` with an attached + target_version property. + ''' + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path() + request.query = { + 'restype': 'service', + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_service_properties) + + def get_blob_properties( + self, container_name, blob_name, snapshot=None, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Returns all user-defined metadata, standard HTTP properties, and + system properties for the blob. It does not return the content of the blob. + Returns :class:`~azure.storage.blob.models.Blob` + with :class:`~azure.storage.blob.models.BlobProperties` and a metadata dict. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that, + when present, specifies the blob snapshot to retrieve. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: a blob object including properties and metadata. + :rtype: :class:`~azure.storage.blob.models.Blob` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + request = HTTPRequest() + request.method = 'HEAD' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name, blob_name) + request.query = { + 'snapshot': _to_str(snapshot), + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + + return self._perform_request(request, _parse_blob, [blob_name, snapshot]) + + def set_blob_properties( + self, container_name, blob_name, content_settings=None, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Sets system properties on the blob. If one property is set for the + content_settings, all properties will be overriden. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set blob properties. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + 'x-ms-lease-id': _to_str(lease_id) + } + if content_settings is not None: + request.headers.update(content_settings._to_headers()) + + return self._perform_request(request, _parse_base_properties) + + def exists(self, container_name, blob_name=None, snapshot=None, timeout=None): + ''' + Returns a boolean indicating whether the container exists (if blob_name + is None), or otherwise a boolean indicating whether the blob exists. + + :param str container_name: + Name of a container. + :param str blob_name: + Name of a blob. If None, the container will be checked for existence. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that, + when present, specifies the snapshot. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: A boolean indicating whether the resource exists. + :rtype: bool + ''' + _validate_not_none('container_name', container_name) + try: + if blob_name is None: + self.get_container_properties(container_name, timeout=timeout) + else: + self.get_blob_properties(container_name, blob_name, snapshot=snapshot, timeout=timeout) + return True + except AzureHttpError as ex: + _dont_fail_not_exist(ex) + return False + + def _get_blob( + self, container_name, blob_name, snapshot=None, start_range=None, + end_range=None, validate_content=False, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, timeout=None, + _context=None): + ''' + Downloads a blob's content, metadata, and properties. You can also + call this API to read a snapshot. You can specify a range if you don't + need to download the blob in its entirety. If no range is specified, + the full blob will be downloaded. + + See get_blob_to_* for high level functions that handle the download + of large blobs with automatic chunking and progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that, + when present, specifies the blob snapshot to retrieve. + :param int start_range: + Start of byte range to use for downloading a section of the blob. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param int end_range: + End of byte range to use for downloading a section of the blob. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param bool validate_content: + When this is set to True and specified together with the Range header, + the service returns the MD5 hash for the range, as long as the range + is less than or equal to 4 MB in size. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: A Blob with content, properties, and metadata. + :rtype: :class:`~azure.storage.blob.models.Blob` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_decryption_required(self.require_encryption, + self.key_encryption_key, + self.key_resolver_function) + + start_offset, end_offset = 0, 0 + if self.key_encryption_key is not None or self.key_resolver_function is not None: + if start_range is not None: + # Align the start of the range along a 16 byte block + start_offset = start_range % 16 + start_range -= start_offset + + # Include an extra 16 bytes for the IV if necessary + # Because of the previous offsetting, start_range will always + # be a multiple of 16. + if start_range > 0: + start_offset += 16 + start_range -= 16 + + if end_range is not None: + # Align the end of the range along a 16 byte block + end_offset = 15 - (end_range % 16) + end_range += end_offset + + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name, blob_name) + request.query = { + 'snapshot': _to_str(snapshot), + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + _validate_and_format_range_headers( + request, + start_range, + end_range, + start_range_required=False, + end_range_required=False, + check_content_md5=validate_content) + + return self._perform_request(request, _parse_blob, + [blob_name, snapshot, validate_content, self.require_encryption, + self.key_encryption_key, self.key_resolver_function, + start_offset, end_offset], + operation_context=_context) + + def get_blob_to_path( + self, container_name, blob_name, file_path, open_mode='wb', + snapshot=None, start_range=None, end_range=None, + validate_content=False, progress_callback=None, + max_connections=2, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, + timeout=None): + ''' + Downloads a blob to a file path, with automatic chunking and progress + notifications. Returns an instance of :class:`~azure.storage.blob.models.Blob` with + properties and metadata. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str file_path: + Path of file to write out to. + :param str open_mode: + Mode to use when opening the file. Note that specifying append only + open_mode prevents parallel download. So, max_connections must be set + to 1 if this open_mode is used. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that, + when present, specifies the blob snapshot to retrieve. + :param int start_range: + Start of byte range to use for downloading a section of the blob. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param int end_range: + End of byte range to use for downloading a section of the blob. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param bool validate_content: + If set to true, validates an MD5 hash for each retrieved portion of + the blob. This is primarily valuable for detecting bitflips on the wire + if using http instead of https as https (the default) will already + validate. Note that the service will only return transactional MD5s + for chunks 4MB or less so the first get request will be of size + self.MAX_CHUNK_GET_SIZE instead of self.MAX_SINGLE_GET_SIZE. If + self.MAX_CHUNK_GET_SIZE was set to greater than 4MB an error will be + thrown. As computing the MD5 takes processing time and more requests + will need to be done due to the reduced chunk size there may be some + increase in latency. + :param progress_callback: + Callback for progress with signature function(current, total) + where current is the number of bytes transfered so far, and total is + the size of the blob if known. + :type progress_callback: func(current, total) + :param int max_connections: + If set to 2 or greater, an initial get will be done for the first + self.MAX_SINGLE_GET_SIZE bytes of the blob. If this is the entire blob, + the method returns at this point. If it is not, it will download the + remaining data parallel using the number of threads equal to + max_connections. Each chunk will be of size self.MAX_CHUNK_GET_SIZE. + If set to 1, a single large get request will be done. This is not + generally recommended but available if very few threads should be + used, network requests are very expensive, or a non-seekable stream + prevents parallel download. This may also be useful if many blobs are + expected to be empty as an extra request is required for empty blobs + if max_connections is greater than 1. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: A Blob with properties and metadata. If max_connections is greater + than 1, the content_md5 (if set on the blob) will not be returned. If you + require this value, either use get_blob_properties or set max_connections + to 1. + :rtype: :class:`~azure.storage.blob.models.Blob` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('file_path', file_path) + _validate_not_none('open_mode', open_mode) + + if max_connections > 1 and 'a' in open_mode: + raise ValueError(_ERROR_PARALLEL_NOT_SEEKABLE) + + with open(file_path, open_mode) as stream: + blob = self.get_blob_to_stream( + container_name, + blob_name, + stream, + snapshot, + start_range, + end_range, + validate_content, + progress_callback, + max_connections, + lease_id, + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout) + + return blob + + def get_blob_to_stream( + self, container_name, blob_name, stream, snapshot=None, + start_range=None, end_range=None, validate_content=False, + progress_callback=None, max_connections=2, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + + ''' + Downloads a blob to a stream, with automatic chunking and progress + notifications. Returns an instance of :class:`~azure.storage.blob.models.Blob` with + properties and metadata. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param io.IOBase stream: + Opened stream to write to. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that, + when present, specifies the blob snapshot to retrieve. + :param int start_range: + Start of byte range to use for downloading a section of the blob. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param int end_range: + End of byte range to use for downloading a section of the blob. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param bool validate_content: + If set to true, validates an MD5 hash for each retrieved portion of + the blob. This is primarily valuable for detecting bitflips on the wire + if using http instead of https as https (the default) will already + validate. Note that the service will only return transactional MD5s + for chunks 4MB or less so the first get request will be of size + self.MAX_CHUNK_GET_SIZE instead of self.MAX_SINGLE_GET_SIZE. If + self.MAX_CHUNK_GET_SIZE was set to greater than 4MB an error will be + thrown. As computing the MD5 takes processing time and more requests + will need to be done due to the reduced chunk size there may be some + increase in latency. + :param progress_callback: + Callback for progress with signature function(current, total) + where current is the number of bytes transfered so far, and total is + the size of the blob if known. + :type progress_callback: func(current, total) + :param int max_connections: + If set to 2 or greater, an initial get will be done for the first + self.MAX_SINGLE_GET_SIZE bytes of the blob. If this is the entire blob, + the method returns at this point. If it is not, it will download the + remaining data parallel using the number of threads equal to + max_connections. Each chunk will be of size self.MAX_CHUNK_GET_SIZE. + If set to 1, a single large get request will be done. This is not + generally recommended but available if very few threads should be + used, network requests are very expensive, or a non-seekable stream + prevents parallel download. This may also be useful if many blobs are + expected to be empty as an extra request is required for empty blobs + if max_connections is greater than 1. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: A Blob with properties and metadata. If max_connections is greater + than 1, the content_md5 (if set on the blob) will not be returned. If you + require this value, either use get_blob_properties or set max_connections + to 1. + :rtype: :class:`~azure.storage.blob.models.Blob` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('stream', stream) + + if end_range is not None: + _validate_not_none("start_range", start_range) + + # If the user explicitly sets max_connections to 1, do a single shot download + if max_connections == 1: + blob = self._get_blob(container_name, + blob_name, + snapshot, + start_range=start_range, + end_range=end_range, + validate_content=validate_content, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout) + + # Set the download size + download_size = blob.properties.content_length + + # If max_connections is greater than 1, do the first get to establish the + # size of the blob and get the first segment of data + else: + if sys.version_info >= (3,) and not stream.seekable(): + raise ValueError(_ERROR_PARALLEL_NOT_SEEKABLE) + + # The service only provides transactional MD5s for chunks under 4MB. + # If validate_content is on, get only self.MAX_CHUNK_GET_SIZE for the first + # chunk so a transactional MD5 can be retrieved. + first_get_size = self.MAX_SINGLE_GET_SIZE if not validate_content else self.MAX_CHUNK_GET_SIZE + + initial_request_start = start_range if start_range is not None else 0 + + if end_range is not None and end_range - start_range < first_get_size: + initial_request_end = end_range + else: + initial_request_end = initial_request_start + first_get_size - 1 + + # Send a context object to make sure we always retry to the initial location + operation_context = _OperationContext(location_lock=True) + try: + blob = self._get_blob(container_name, + blob_name, + snapshot, + start_range=initial_request_start, + end_range=initial_request_end, + validate_content=validate_content, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout, + _context=operation_context) + + # Parse the total blob size and adjust the download size if ranges + # were specified + blob_size = _parse_length_from_content_range(blob.properties.content_range) + if end_range is not None: + # Use the end_range unless it is over the end of the blob + download_size = min(blob_size, end_range - start_range + 1) + elif start_range is not None: + download_size = blob_size - start_range + else: + download_size = blob_size + except AzureHttpError as ex: + if start_range is None and ex.status_code == 416: + # Get range will fail on an empty blob. If the user did not + # request a range, do a regular get request in order to get + # any properties. + blob = self._get_blob(container_name, + blob_name, + snapshot, + validate_content=validate_content, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout, + _context=operation_context) + + # Set the download size to empty + download_size = 0 + else: + raise ex + + # Mark the first progress chunk. If the blob is small or this is a single + # shot download, this is the only call + if progress_callback: + progress_callback(blob.properties.content_length, download_size) + + # Write the content to the user stream + # Clear blob content since output has been written to user stream + if blob.content is not None: + stream.write(blob.content) + blob.content = None + + # If the blob is small or single shot download was used, the download is + # complete at this point. If blob size is large, use parallel download. + if blob.properties.content_length != download_size: + # Lock on the etag. This can be overriden by the user by specifying '*' + if_match = if_match if if_match is not None else blob.properties.etag + + end_blob = blob_size + if end_range is not None: + # Use the end_range unless it is over the end of the blob + end_blob = min(blob_size, end_range + 1) + + _download_blob_chunks( + self, + container_name, + blob_name, + snapshot, + download_size, + self.MAX_CHUNK_GET_SIZE, + first_get_size, + initial_request_end + 1, # start where the first download ended + end_blob, + stream, + max_connections, + progress_callback, + validate_content, + lease_id, + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout, + operation_context + ) + + # Set the content length to the download size instead of the size of + # the last range + blob.properties.content_length = download_size + + # Overwrite the content range to the user requested range + blob.properties.content_range = 'bytes {0}-{1}/{2}'.format(start_range, end_range, blob_size) + + # Overwrite the content MD5 as it is the MD5 for the last range instead + # of the stored MD5 + # TODO: Set to the stored MD5 when the service returns this + blob.properties.content_md5 = None + + return blob + + def get_blob_to_bytes( + self, container_name, blob_name, snapshot=None, + start_range=None, end_range=None, validate_content=False, + progress_callback=None, max_connections=2, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Downloads a blob as an array of bytes, with automatic chunking and + progress notifications. Returns an instance of :class:`~azure.storage.blob.models.Blob` with + properties, metadata, and content. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that, + when present, specifies the blob snapshot to retrieve. + :param int start_range: + Start of byte range to use for downloading a section of the blob. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param int end_range: + End of byte range to use for downloading a section of the blob. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param bool validate_content: + If set to true, validates an MD5 hash for each retrieved portion of + the blob. This is primarily valuable for detecting bitflips on the wire + if using http instead of https as https (the default) will already + validate. Note that the service will only return transactional MD5s + for chunks 4MB or less so the first get request will be of size + self.MAX_CHUNK_GET_SIZE instead of self.MAX_SINGLE_GET_SIZE. If + self.MAX_CHUNK_GET_SIZE was set to greater than 4MB an error will be + thrown. As computing the MD5 takes processing time and more requests + will need to be done due to the reduced chunk size there may be some + increase in latency. + :param progress_callback: + Callback for progress with signature function(current, total) + where current is the number of bytes transfered so far, and total is + the size of the blob if known. + :type progress_callback: func(current, total) + :param int max_connections: + If set to 2 or greater, an initial get will be done for the first + self.MAX_SINGLE_GET_SIZE bytes of the blob. If this is the entire blob, + the method returns at this point. If it is not, it will download the + remaining data parallel using the number of threads equal to + max_connections. Each chunk will be of size self.MAX_CHUNK_GET_SIZE. + If set to 1, a single large get request will be done. This is not + generally recommended but available if very few threads should be + used, network requests are very expensive, or a non-seekable stream + prevents parallel download. This may also be useful if many blobs are + expected to be empty as an extra request is required for empty blobs + if max_connections is greater than 1. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: A Blob with properties and metadata. If max_connections is greater + than 1, the content_md5 (if set on the blob) will not be returned. If you + require this value, either use get_blob_properties or set max_connections + to 1. + :rtype: :class:`~azure.storage.blob.models.Blob` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + + stream = BytesIO() + blob = self.get_blob_to_stream( + container_name, + blob_name, + stream, + snapshot, + start_range, + end_range, + validate_content, + progress_callback, + max_connections, + lease_id, + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout) + + blob.content = stream.getvalue() + return blob + + def get_blob_to_text( + self, container_name, blob_name, encoding='utf-8', snapshot=None, + start_range=None, end_range=None, validate_content=False, + progress_callback=None, max_connections=2, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Downloads a blob as unicode text, with automatic chunking and progress + notifications. Returns an instance of :class:`~azure.storage.blob.models.Blob` with + properties, metadata, and content. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str encoding: + Python encoding to use when decoding the blob data. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that, + when present, specifies the blob snapshot to retrieve. + :param int start_range: + Start of byte range to use for downloading a section of the blob. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param int end_range: + End of byte range to use for downloading a section of the blob. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of blob. + :param bool validate_content: + If set to true, validates an MD5 hash for each retrieved portion of + the blob. This is primarily valuable for detecting bitflips on the wire + if using http instead of https as https (the default) will already + validate. Note that the service will only return transactional MD5s + for chunks 4MB or less so the first get request will be of size + self.MAX_CHUNK_GET_SIZE instead of self.MAX_SINGLE_GET_SIZE. If + self.MAX_CHUNK_GET_SIZE was set to greater than 4MB an error will be + thrown. As computing the MD5 takes processing time and more requests + will need to be done due to the reduced chunk size there may be some + increase in latency. + :param progress_callback: + Callback for progress with signature function(current, total) + where current is the number of bytes transfered so far, and total is + the size of the blob if known. + :type progress_callback: func(current, total) + :param int max_connections: + If set to 2 or greater, an initial get will be done for the first + self.MAX_SINGLE_GET_SIZE bytes of the blob. If this is the entire blob, + the method returns at this point. If it is not, it will download the + remaining data parallel using the number of threads equal to + max_connections. Each chunk will be of size self.MAX_CHUNK_GET_SIZE. + If set to 1, a single large get request will be done. This is not + generally recommended but available if very few threads should be + used, network requests are very expensive, or a non-seekable stream + prevents parallel download. This may also be useful if many blobs are + expected to be empty as an extra request is required for empty blobs + if max_connections is greater than 1. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: A Blob with properties and metadata. If max_connections is greater + than 1, the content_md5 (if set on the blob) will not be returned. If you + require this value, either use get_blob_properties or set max_connections + to 1. + :rtype: :class:`~azure.storage.blob.models.Blob` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('encoding', encoding) + + blob = self.get_blob_to_bytes(container_name, + blob_name, + snapshot, + start_range, + end_range, + validate_content, + progress_callback, + max_connections, + lease_id, + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout) + blob.content = blob.content.decode(encoding) + return blob + + def get_blob_metadata( + self, container_name, blob_name, snapshot=None, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Returns all user-defined metadata for the specified blob or snapshot. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str snapshot: + The snapshot parameter is an opaque value that, + when present, specifies the blob snapshot to retrieve. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: + A dictionary representing the blob metadata name, value pairs. + :rtype: dict(str, str) + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name, blob_name) + request.query = { + 'snapshot': _to_str(snapshot), + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + + return self._perform_request(request, _parse_metadata) + + def set_blob_metadata(self, container_name, blob_name, + metadata=None, lease_id=None, + if_modified_since=None, if_unmodified_since=None, + if_match=None, if_none_match=None, timeout=None): + ''' + Sets user-defined metadata for the specified blob as one or more + name-value pairs. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param metadata: + Dict containing name and value pairs. Each call to this operation + replaces all existing metadata attached to the blob. To remove all + metadata from the blob, call this operation with no metadata headers. + :type metadata: dict(str, str) + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + 'x-ms-lease-id': _to_str(lease_id), + } + _add_metadata_headers(metadata, request) + + return self._perform_request(request, _parse_base_properties) + + def _lease_blob_impl(self, container_name, blob_name, + lease_action, lease_id, + lease_duration, lease_break_period, + proposed_lease_id, if_modified_since, + if_unmodified_since, if_match, if_none_match, timeout=None): + ''' + Establishes and manages a lease on a blob for write and delete operations. + The Lease Blob operation can be called in one of five modes: + Acquire, to request a new lease. + Renew, to renew an existing lease. + Change, to change the ID of an existing lease. + Release, to free the lease if it is no longer needed so that another + client may immediately acquire a lease against the blob. + Break, to end the lease but ensure that another client cannot acquire + a new lease until the current lease period has expired. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str lease_action: + Possible _LeaseActions acquire|renew|release|break|change + :param str lease_id: + Required if the blob has an active lease. + :param int lease_duration: + Specifies the duration of the lease, in seconds, or negative one + (-1) for a lease that never expires. A non-infinite lease can be + between 15 and 60 seconds. A lease duration cannot be changed + using renew or change. + :param int lease_break_period: + For a break operation, this is the proposed duration of + seconds that the lease should continue before it is broken, between + 0 and 60 seconds. This break period is only used if it is shorter + than the time remaining on the lease. If longer, the time remaining + on the lease is used. A new lease will not be available before the + break period has expired, but the lease may be held for longer than + the break period. If this header does not appear with a break + operation, a fixed-duration lease breaks after the remaining lease + period elapses, and an infinite lease breaks immediately. + :param str proposed_lease_id: + Optional for acquire, required for change. Proposed lease ID, in a + GUID string format. The Blob service returns 400 (Invalid request) + if the proposed lease ID is not in the correct format. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: + Response headers returned from the service call. + :rtype: dict(str, str) + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('lease_action', lease_action) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'lease', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'x-ms-lease-action': _to_str(lease_action), + 'x-ms-lease-duration': _to_str(lease_duration), + 'x-ms-lease-break-period': _to_str(lease_break_period), + 'x-ms-proposed-lease-id': _to_str(proposed_lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + + return self._perform_request(request, _parse_lease) + + def acquire_blob_lease(self, container_name, blob_name, + lease_duration=-1, + proposed_lease_id=None, + if_modified_since=None, + if_unmodified_since=None, + if_match=None, + if_none_match=None, timeout=None): + ''' + Requests a new lease. If the blob does not have an active lease, the Blob + service creates a lease on the blob and returns a new lease ID. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param int lease_duration: + Specifies the duration of the lease, in seconds, or negative one + (-1) for a lease that never expires. A non-infinite lease can be + between 15 and 60 seconds. A lease duration cannot be changed + using renew or change. Default is -1 (infinite lease). + :param str proposed_lease_id: + Proposed lease ID, in a GUID string format. The Blob service + returns 400 (Invalid request) if the proposed lease ID is not + in the correct format. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: the lease ID of the newly created lease. + :return: str + ''' + _validate_not_none('lease_duration', lease_duration) + + if lease_duration is not -1 and \ + (lease_duration < 15 or lease_duration > 60): + raise ValueError(_ERROR_INVALID_LEASE_DURATION) + lease = self._lease_blob_impl(container_name, + blob_name, + _LeaseActions.Acquire, + None, # lease_id + lease_duration, + None, # lease_break_period + proposed_lease_id, + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout) + return lease['id'] + + def renew_blob_lease(self, container_name, blob_name, + lease_id, if_modified_since=None, + if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Renews the lease. The lease can be renewed if the lease ID specified on + the request matches that associated with the blob. Note that the lease may + be renewed even if it has expired as long as the blob has not been modified + or leased again since the expiration of that lease. When you renew a lease, + the lease duration clock resets. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str lease_id: + Lease ID for active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: the lease ID of the renewed lease. + :return: str + ''' + _validate_not_none('lease_id', lease_id) + + lease = self._lease_blob_impl(container_name, + blob_name, + _LeaseActions.Renew, + lease_id, + None, # lease_duration + None, # lease_break_period + None, # proposed_lease_id + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout) + return lease['id'] + + def release_blob_lease(self, container_name, blob_name, + lease_id, if_modified_since=None, + if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Releases the lease. The lease may be released if the lease ID specified on the + request matches that associated with the blob. Releasing the lease allows another + client to immediately acquire the lease for the blob as soon as the release is complete. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str lease_id: + Lease ID for active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('lease_id', lease_id) + + self._lease_blob_impl(container_name, + blob_name, + _LeaseActions.Release, + lease_id, + None, # lease_duration + None, # lease_break_period + None, # proposed_lease_id + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout) + + def break_blob_lease(self, container_name, blob_name, + lease_break_period=None, + if_modified_since=None, + if_unmodified_since=None, + if_match=None, + if_none_match=None, timeout=None): + ''' + Breaks the lease, if the blob has an active lease. Once a lease is broken, + it cannot be renewed. Any authorized request can break the lease; the request + is not required to specify a matching lease ID. When a lease is broken, + the lease break period is allowed to elapse, during which time no lease operation + except break and release can be performed on the blob. When a lease is successfully + broken, the response indicates the interval in seconds until a new lease can be acquired. + + A lease that has been broken can also be released, in which case another client may + immediately acquire the lease on the blob. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param int lease_break_period: + For a break operation, this is the proposed duration of + seconds that the lease should continue before it is broken, between + 0 and 60 seconds. This break period is only used if it is shorter + than the time remaining on the lease. If longer, the time remaining + on the lease is used. A new lease will not be available before the + break period has expired, but the lease may be held for longer than + the break period. If this header does not appear with a break + operation, a fixed-duration lease breaks after the remaining lease + period elapses, and an infinite lease breaks immediately. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: Approximate time remaining in the lease period, in seconds. + :return: int + ''' + if (lease_break_period is not None) and (lease_break_period < 0 or lease_break_period > 60): + raise ValueError(_ERROR_INVALID_LEASE_BREAK_PERIOD) + + lease = self._lease_blob_impl(container_name, + blob_name, + _LeaseActions.Break, + None, # lease_id + None, # lease_duration + lease_break_period, + None, # proposed_lease_id + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout) + return lease['time'] + + def change_blob_lease(self, container_name, blob_name, + lease_id, + proposed_lease_id, + if_modified_since=None, + if_unmodified_since=None, + if_match=None, + if_none_match=None, timeout=None): + ''' + Changes the lease ID of an active lease. A change must include the current + lease ID and a new lease ID. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str lease_id: + Required if the blob has an active lease. + :param str proposed_lease_id: + Proposed lease ID, in a GUID string format. The Blob service returns + 400 (Invalid request) if the proposed lease ID is not in the correct format. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + self._lease_blob_impl(container_name, + blob_name, + _LeaseActions.Change, + lease_id, + None, # lease_duration + None, # lease_break_period + proposed_lease_id, + if_modified_since, + if_unmodified_since, + if_match, + if_none_match, + timeout) + + def snapshot_blob(self, container_name, blob_name, + metadata=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, + if_none_match=None, lease_id=None, timeout=None): + ''' + Creates a read-only snapshot of a blob. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param metadata: + Specifies a user-defined name-value pair associated with the blob. + If no name-value pairs are specified, the operation will copy the + base blob metadata to the snapshot. If one or more name-value pairs + are specified, the snapshot is created with the specified metadata, + and metadata is not copied from the base blob. + :type metadata: dict(str, str) + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param str lease_id: + Required if the blob has an active lease. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: snapshot properties + :rtype: :class:`~azure.storage.blob.models.Blob` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'snapshot', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + 'x-ms-lease-id': _to_str(lease_id) + } + _add_metadata_headers(metadata, request) + + return self._perform_request(request, _parse_snapshot_blob, [blob_name]) + + def copy_blob(self, container_name, blob_name, copy_source, + metadata=None, + source_if_modified_since=None, + source_if_unmodified_since=None, + source_if_match=None, source_if_none_match=None, + destination_if_modified_since=None, + destination_if_unmodified_since=None, + destination_if_match=None, + destination_if_none_match=None, + destination_lease_id=None, + source_lease_id=None, timeout=None): + ''' + Copies a blob asynchronously. This operation returns a copy operation + properties object, including a copy ID you can use to check or abort the + copy operation. The Blob service copies blobs on a best-effort basis. + + The source blob for a copy operation may be a block blob, an append blob, + or a page blob. If the destination blob already exists, it must be of the + same blob type as the source blob. Any existing destination blob will be + overwritten. The destination blob cannot be modified while a copy operation + is in progress. + + When copying from a page blob, the Blob service creates a destination page + blob of the source blob's length, initially containing all zeroes. Then + the source page ranges are enumerated, and non-empty ranges are copied. + + For a block blob or an append blob, the Blob service creates a committed + blob of zero length before returning from this operation. When copying + from a block blob, all committed blocks and their block IDs are copied. + Uncommitted blocks are not copied. At the end of the copy operation, the + destination blob will have the same committed block count as the source. + + When copying from an append blob, all committed blocks are copied. At the + end of the copy operation, the destination blob will have the same committed + block count as the source. + + For all blob types, you can call get_blob_properties on the destination + blob to check the status of the copy operation. The final blob will be + committed when the copy completes. + + :param str container_name: + Name of the destination container. The container must exist. + :param str blob_name: + Name of the destination blob. If the destination blob exists, it will + be overwritten. Otherwise, it will be created. + :param str copy_source: + A URL of up to 2 KB in length that specifies an Azure file or blob. + The value should be URL-encoded as it would appear in a request URI. + If the source is in another account, the source must either be public + or must be authenticated via a shared access signature. If the source + is public, no authentication is required. + Examples: + https://myaccount.blob.core.windows.net/mycontainer/myblob + https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot= + https://otheraccount.blob.core.windows.net/mycontainer/myblob?sastoken + :param metadata: + Name-value pairs associated with the blob as metadata. If no name-value + pairs are specified, the operation will copy the metadata from the + source blob or file to the destination blob. If one or more name-value + pairs are specified, the destination blob is created with the specified + metadata, and metadata is not copied from the source blob or file. + :type metadata: dict(str, str) + :param datetime source_if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only if the source + blob has been modified since the specified date/time. + :param datetime source_if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only if the source blob + has not been modified since the specified date/time. + :param ETag source_if_match: + An ETag value, or the wildcard character (*). Specify this conditional + header to copy the source blob only if its ETag matches the value + specified. If the ETag values do not match, the Blob service returns + status code 412 (Precondition Failed). This header cannot be specified + if the source is an Azure File. + :param ETag source_if_none_match: + An ETag value, or the wildcard character (*). Specify this conditional + header to copy the blob only if its ETag does not match the value + specified. If the values are identical, the Blob service returns status + code 412 (Precondition Failed). This header cannot be specified if the + source is an Azure File. + :param datetime destination_if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only + if the destination blob has been modified since the specified date/time. + If the destination blob has not been modified, the Blob service returns + status code 412 (Precondition Failed). + :param datetime destination_if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only + if the destination blob has not been modified since the specified + date/time. If the destination blob has been modified, the Blob service + returns status code 412 (Precondition Failed). + :param ETag destination_if_match: + An ETag value, or the wildcard character (*). Specify an ETag value for + this conditional header to copy the blob only if the specified ETag value + matches the ETag value for an existing destination blob. If the ETag for + the destination blob does not match the ETag specified for If-Match, the + Blob service returns status code 412 (Precondition Failed). + :param ETag destination_if_none_match: + An ETag value, or the wildcard character (*). Specify an ETag value for + this conditional header to copy the blob only if the specified ETag value + does not match the ETag value for the destination blob. Specify the wildcard + character (*) to perform the operation only if the destination blob does not + exist. If the specified condition isn't met, the Blob service returns status + code 412 (Precondition Failed). + :param str destination_lease_id: + The lease ID specified for this header must match the lease ID of the + destination blob. If the request does not include the lease ID or it is not + valid, the operation fails with status code 412 (Precondition Failed). + :param str source_lease_id: + Specify this to perform the Copy Blob operation only if + the lease ID given matches the active lease ID of the source blob. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: Copy operation properties such as status, source, and ID. + :rtype: :class:`~azure.storage.blob.models.CopyProperties` + ''' + return self._copy_blob(container_name, blob_name, copy_source, + metadata, + None, + source_if_modified_since, source_if_unmodified_since, + source_if_match, source_if_none_match, + destination_if_modified_since, + destination_if_unmodified_since, + destination_if_match, + destination_if_none_match, + destination_lease_id, + source_lease_id, timeout, + False) + + def _copy_blob(self, container_name, blob_name, copy_source, + metadata=None, + premium_page_blob_tier=None, + source_if_modified_since=None, + source_if_unmodified_since=None, + source_if_match=None, source_if_none_match=None, + destination_if_modified_since=None, + destination_if_unmodified_since=None, + destination_if_match=None, + destination_if_none_match=None, + destination_lease_id=None, + source_lease_id=None, timeout=None, + incremental_copy=False): + ''' + See copy_blob for more details. This helper method + allows for standard copies as well as incremental copies which are only supported for page blobs. + :param bool incremental_copy: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('copy_source', copy_source) + + if copy_source.startswith('/'): + # Backwards compatibility for earlier versions of the SDK where + # the copy source can be in the following formats: + # - Blob in named container: + # /accountName/containerName/blobName + # - Snapshot in named container: + # /accountName/containerName/blobName?snapshot= + # - Blob in root container: + # /accountName/blobName + # - Snapshot in root container: + # /accountName/blobName?snapshot= + account, _, source = \ + copy_source.partition('/')[2].partition('/') + copy_source = self.protocol + '://' + \ + self.primary_endpoint + '/' + source + + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + + if incremental_copy: + request.query = { + 'comp': 'incrementalcopy', + 'timeout': _int_to_str(timeout), + } + else: + request.query = {'timeout': _int_to_str(timeout)} + + request.headers = { + 'x-ms-copy-source': _to_str(copy_source), + 'x-ms-source-if-modified-since': _to_str(source_if_modified_since), + 'x-ms-source-if-unmodified-since': _to_str(source_if_unmodified_since), + 'x-ms-source-if-match': _to_str(source_if_match), + 'x-ms-source-if-none-match': _to_str(source_if_none_match), + 'If-Modified-Since': _datetime_to_utc_string(destination_if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(destination_if_unmodified_since), + 'If-Match': _to_str(destination_if_match), + 'If-None-Match': _to_str(destination_if_none_match), + 'x-ms-lease-id': _to_str(destination_lease_id), + 'x-ms-source-lease-id': _to_str(source_lease_id), + 'x-ms-access-tier': _to_str(premium_page_blob_tier) + } + _add_metadata_headers(metadata, request) + + return self._perform_request(request, _parse_properties, [BlobProperties]).copy + + def abort_copy_blob(self, container_name, blob_name, copy_id, + lease_id=None, timeout=None): + ''' + Aborts a pending copy_blob operation, and leaves a destination blob + with zero length and full metadata. + + :param str container_name: + Name of destination container. + :param str blob_name: + Name of destination blob. + :param str copy_id: + Copy identifier provided in the copy.id of the original + copy_blob operation. + :param str lease_id: + Required if the destination blob has an active infinite lease. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('copy_id', copy_id) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'copy', + 'copyid': _to_str(copy_id), + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'x-ms-copy-action': 'abort', + } + + self._perform_request(request) + + def delete_blob(self, container_name, blob_name, snapshot=None, + lease_id=None, delete_snapshots=None, + if_modified_since=None, if_unmodified_since=None, + if_match=None, if_none_match=None, timeout=None): + ''' + Marks the specified blob or snapshot for deletion. + The blob is later deleted during garbage collection. + + Note that in order to delete a blob, you must delete all of its + snapshots. You can delete both at the same time with the Delete + Blob operation. + + If a delete retention policy is enabled for the service, then this operation soft deletes the blob or snapshot + and retains the blob or snapshot for specified number of days. + After specified number of days, blob's data is removed from the service during garbage collection. + Soft deleted blob or snapshot is accessible through List Blobs API specifying include=Include.Deleted option. + Soft-deleted blob or snapshot can be restored using Undelete API. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that, + when present, specifies the blob snapshot to delete. + :param str lease_id: + Required if the blob has an active lease. + :param ~azure.storage.blob.models.DeleteSnapshot delete_snapshots: + Required if the blob has associated snapshots. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + request = HTTPRequest() + request.method = 'DELETE' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'x-ms-delete-snapshots': _to_str(delete_snapshots), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + request.query = { + 'snapshot': _to_str(snapshot), + 'timeout': _int_to_str(timeout) + } + + self._perform_request(request) + + def undelete_blob(self, container_name, blob_name, timeout=None): + ''' + The undelete Blob operation restores the contents and metadata of soft deleted blob or snapshot. + Attempting to undelete a blob or snapshot that is not soft deleted will succeed without any changes. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'undelete', + 'timeout': _int_to_str(timeout) + } + + self._perform_request(request) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/blockblobservice.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/blockblobservice.py new file mode 100644 index 00000000000..aafed26b94a --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/blockblobservice.py @@ -0,0 +1,1007 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from io import ( + BytesIO +) +from os import ( + path, +) + +from ..common._common_conversion import ( + _encode_base64, + _to_str, + _int_to_str, + _datetime_to_utc_string, + _get_content_md5, +) +from ..common._constants import ( + SERVICE_HOST_BASE, + DEFAULT_PROTOCOL, +) +from ..common._error import ( + _validate_not_none, + _validate_type_bytes, + _validate_encryption_required, + _validate_encryption_unsupported, + _ERROR_VALUE_NEGATIVE, + _ERROR_VALUE_SHOULD_BE_STREAM +) +from ..common._http import HTTPRequest +from ..common._serialization import ( + _get_request_body, + _get_data_bytes_only, + _get_data_bytes_or_stream_only, + _add_metadata_headers, +) +from ..common._serialization import ( + _len_plus +) +from ._deserialization import ( + _convert_xml_to_block_list, + _parse_base_properties, +) +from ._encryption import ( + _encrypt_blob, + _generate_blob_encryption_data, +) +from ._serialization import ( + _convert_block_list_to_xml, + _get_path, +) +from ._upload_chunking import ( + _BlockBlobChunkUploader, + _upload_blob_chunks, + _upload_blob_substream_blocks, +) +from .baseblobservice import BaseBlobService +from .models import ( + _BlobTypes, +) + + +class BlockBlobService(BaseBlobService): + ''' + Block blobs let you upload large blobs efficiently. Block blobs are comprised + of blocks, each of which is identified by a block ID. You create or modify a + block blob by writing a set of blocks and committing them by their block IDs. + Each block can be a different size, up to a maximum of 100 MB, and a block blob + can include up to 50,000 blocks. The maximum size of a block blob is therefore + approximately 4.75 TB (100 MB X 50,000 blocks). If you are writing a block + blob that is no more than 64 MB in size, you can upload it in its entirety with + a single write operation; see create_blob_from_bytes. + + :ivar int MAX_SINGLE_PUT_SIZE: + The largest size upload supported in a single put call. This is used by + the create_blob_from_* methods if the content length is known and is less + than this value. + :ivar int MAX_BLOCK_SIZE: + The size of the blocks put by create_blob_from_* methods if the content + length is unknown or is larger than MAX_SINGLE_PUT_SIZE. Smaller blocks + may be put. The maximum block size the service supports is 100MB. + :ivar int MIN_LARGE_BLOCK_UPLOAD_THRESHOLD: + The minimum block size at which the the memory-optimized, block upload + algorithm is considered. This algorithm is only applicable to the create_blob_from_file and + create_blob_from_stream methods and will prevent the full buffering of blocks. + In addition to the block size, ContentMD5 validation and Encryption must be disabled as + these options require the blocks to be buffered. + ''' + + MAX_SINGLE_PUT_SIZE = 64 * 1024 * 1024 + MAX_BLOCK_SIZE = 4 * 1024 * 1024 + MIN_LARGE_BLOCK_UPLOAD_THRESHOLD = 4 * 1024 * 1024 + 1 + + def __init__(self, account_name=None, account_key=None, sas_token=None, is_emulated=False, + protocol=DEFAULT_PROTOCOL, endpoint_suffix=SERVICE_HOST_BASE, custom_domain=None, + request_session=None, connection_string=None, socket_timeout=None, token_credential=None): + ''' + :param str account_name: + The storage account name. This is used to authenticate requests + signed with an account key and to construct the storage endpoint. It + is required unless a connection string is given, or if a custom + domain is used with anonymous authentication. + :param str account_key: + The storage account key. This is used for shared key authentication. + If neither account key or sas token is specified, anonymous access + will be used. + :param str sas_token: + A shared access signature token to use to authenticate requests + instead of the account key. If account key and sas token are both + specified, account key will be used to sign. If neither are + specified, anonymous access will be used. + :param bool is_emulated: + Whether to use the emulator. Defaults to False. If specified, will + override all other parameters besides connection string and request + session. + :param str protocol: + The protocol to use for requests. Defaults to https. + :param str endpoint_suffix: + The host base component of the url, minus the account name. Defaults + to Azure (core.windows.net). Override this to use the China cloud + (core.chinacloudapi.cn). + :param str custom_domain: + The custom domain to use. This can be set in the Azure Portal. For + example, 'www.mydomain.com'. + :param requests.Session request_session: + The session object to use for http requests. + :param str connection_string: + If specified, this will override all other parameters besides + request session. See + http://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/ + for the connection string format. + :param int socket_timeout: + If specified, this will override the default socket timeout. The timeout specified is in seconds. + See DEFAULT_SOCKET_TIMEOUT in _constants.py for the default value. + :param token_credential: + A token credential used to authenticate HTTPS requests. The token value + should be updated before its expiration. + :type `~..common.TokenCredential` + ''' + self.blob_type = _BlobTypes.BlockBlob + super(BlockBlobService, self).__init__( + account_name, account_key, sas_token, is_emulated, protocol, endpoint_suffix, + custom_domain, request_session, connection_string, socket_timeout, token_credential) + + def put_block(self, container_name, blob_name, block, block_id, + validate_content=False, lease_id=None, timeout=None): + ''' + Creates a new block to be committed as part of a blob. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param block: Content of the block. + :type block: io.IOBase or bytes + Content of the block. + :param str block_id: + A valid Base64 string value that identifies the block. Prior to + encoding, the string must be less than or equal to 64 bytes in size. + For a given blob, the length of the value specified for the blockid + parameter must be the same size for each block. Note that the Base64 + string must be URL-encoded. + :param bool validate_content: + If true, calculates an MD5 hash of the block content. The storage + service checks the hash of the content that has arrived + with the hash that was sent. This is primarily valuable for detecting + bitflips on the wire if using http instead of https as https (the default) + will already validate. Note that this MD5 hash is not stored with the + blob. + :param str lease_id: + Required if the blob has an active lease. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + self._put_block( + container_name, + blob_name, + block, + block_id, + validate_content=validate_content, + lease_id=lease_id, + timeout=timeout + ) + + def put_block_list( + self, container_name, blob_name, block_list, content_settings=None, + metadata=None, validate_content=False, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, + timeout=None): + ''' + Writes a blob by specifying the list of block IDs that make up the blob. + In order to be written as part of a blob, a block must have been + successfully written to the server in a prior Put Block operation. + + You can call Put Block List to update a blob by uploading only those + blocks that have changed, then committing the new and existing blocks + together. You can do this by specifying whether to commit a block from + the committed block list or from the uncommitted block list, or to commit + the most recently uploaded version of the block, whichever list it may + belong to. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param block_list: + A list of :class:`~azure.storeage.blob.models.BlobBlock` containing the block ids and block state. + :type block_list: list(:class:`~azure.storage.blob.models.BlobBlock`) + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set properties on the blob. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash of the block list content. The storage + service checks the hash of the block list content that has arrived + with the hash that was sent. This is primarily valuable for detecting + bitflips on the wire if using http instead of https as https (the default) + will already validate. Note that this check is associated with + the block list content, and not with the content of the blob itself. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Block Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + return self._put_block_list( + container_name, + blob_name, + block_list, + content_settings=content_settings, + metadata=metadata, + validate_content=validate_content, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout + ) + + def get_block_list(self, container_name, blob_name, snapshot=None, + block_list_type=None, lease_id=None, timeout=None): + ''' + Retrieves the list of blocks that have been uploaded as part of a + block blob. There are two block lists maintained for a blob: + Committed Block List: + The list of blocks that have been successfully committed to a + given blob with Put Block List. + Uncommitted Block List: + The list of blocks that have been uploaded for a blob using + Put Block, but that have not yet been committed. These blocks + are stored in Azure in association with a blob, but do not yet + form part of the blob. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str snapshot: + Datetime to determine the time to retrieve the blocks. + :param str block_list_type: + Specifies whether to return the list of committed blocks, the list + of uncommitted blocks, or both lists together. Valid values are: + committed, uncommitted, or all. + :param str lease_id: + Required if the blob has an active lease. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: list committed and/or uncommitted blocks for Block Blob + :rtype: :class:`~azure.storage.blob.models.BlobBlockList` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'blocklist', + 'snapshot': _to_str(snapshot), + 'blocklisttype': _to_str(block_list_type), + 'timeout': _int_to_str(timeout), + } + request.headers = {'x-ms-lease-id': _to_str(lease_id)} + + return self._perform_request(request, _convert_xml_to_block_list) + + # ----Convenience APIs----------------------------------------------------- + + def create_blob_from_path( + self, container_name, blob_name, file_path, content_settings=None, + metadata=None, validate_content=False, progress_callback=None, + max_connections=2, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, timeout=None): + ''' + Creates a new blob from a file path, or updates the content of an + existing blob, with automatic chunking and progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param str file_path: + Path of the file to upload as the blob content. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set blob properties. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each chunk of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. Also note that if enabled, the memory-efficient upload algorithm + will not be used, because computing the MD5 hash requires buffering + entire blocks, and doing so defeats the purpose of the memory-efficient algorithm. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use when the blob size exceeds + 64MB. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: ETag and last modified properties for the Block Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('file_path', file_path) + + count = path.getsize(file_path) + with open(file_path, 'rb') as stream: + return self.create_blob_from_stream( + container_name=container_name, + blob_name=blob_name, + stream=stream, + count=count, + content_settings=content_settings, + metadata=metadata, + validate_content=validate_content, + lease_id=lease_id, + progress_callback=progress_callback, + max_connections=max_connections, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout) + + def create_blob_from_stream( + self, container_name, blob_name, stream, count=None, + content_settings=None, metadata=None, validate_content=False, + progress_callback=None, max_connections=2, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None, use_byte_buffer=False): + ''' + Creates a new blob from a file/stream, or updates the content of + an existing blob, with automatic chunking and progress + notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param io.IOBase stream: + Opened file/stream to upload as the blob content. + :param int count: + Number of bytes to read from the stream. This is optional, but + should be supplied for optimal performance. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set blob properties. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each chunk of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. Also note that if enabled, the memory-efficient upload algorithm + will not be used, because computing the MD5 hash requires buffering + entire blocks, and doing so defeats the purpose of the memory-efficient algorithm. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use when the blob size exceeds + 64MB. Note that parallel upload requires the stream to be seekable. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :param bool use_byte_buffer: + If True, this will force usage of the original full block buffering upload path. + By default, this value is False and will employ a memory-efficient, + streaming upload algorithm under the following conditions: + The provided stream is seekable, 'require_encryption' is False, and + MAX_BLOCK_SIZE >= MIN_LARGE_BLOCK_UPLOAD_THRESHOLD. + One should consider the drawbacks of using this approach. In order to achieve + memory-efficiency, a IOBase stream or file-like object is segmented into logical blocks + using a SubStream wrapper. In order to read the correct data, each SubStream must acquire + a lock so that it can safely seek to the right position on the shared, underlying stream. + If max_connections > 1, the concurrency will result in a considerable amount of seeking on + the underlying stream. For the most common inputs such as a file-like stream object, seeking + is an inexpensive operation and this is not much of a concern. However, for other variants of streams + this may not be the case. The trade-off for memory-efficiency must be weighed against the cost of seeking + with your input stream. + The SubStream class will attempt to buffer up to 4 MB internally to reduce the amount of + seek and read calls to the underlying stream. This is particularly beneficial when uploading larger blocks. + :return: ETag and last modified properties for the Block Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('stream', stream) + _validate_encryption_required(self.require_encryption, self.key_encryption_key) + + # Adjust count to include padding if we are expected to encrypt. + adjusted_count = count + if (self.key_encryption_key is not None) and (adjusted_count is not None): + adjusted_count += (16 - (count % 16)) + + # Do single put if the size is smaller than MAX_SINGLE_PUT_SIZE + if adjusted_count is not None and (adjusted_count < self.MAX_SINGLE_PUT_SIZE): + if progress_callback: + progress_callback(0, count) + + data = stream.read(count) + resp = self._put_blob( + container_name=container_name, + blob_name=blob_name, + blob=data, + content_settings=content_settings, + metadata=metadata, + validate_content=validate_content, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout) + + if progress_callback: + progress_callback(count, count) + + return resp + else: # Size is larger than MAX_SINGLE_PUT_SIZE, must upload with multiple put_block calls + cek, iv, encryption_data = None, None, None + + use_original_upload_path = use_byte_buffer or validate_content or self.require_encryption or \ + self.MAX_BLOCK_SIZE < self.MIN_LARGE_BLOCK_UPLOAD_THRESHOLD or \ + hasattr(stream, 'seekable') and not stream.seekable() or \ + not hasattr(stream, 'seek') or not hasattr(stream, 'tell') + + if use_original_upload_path: + if self.key_encryption_key: + cek, iv, encryption_data = _generate_blob_encryption_data(self.key_encryption_key) + + block_ids = _upload_blob_chunks( + blob_service=self, + container_name=container_name, + blob_name=blob_name, + blob_size=count, + block_size=self.MAX_BLOCK_SIZE, + stream=stream, + max_connections=max_connections, + progress_callback=progress_callback, + validate_content=validate_content, + lease_id=lease_id, + uploader_class=_BlockBlobChunkUploader, + timeout=timeout, + content_encryption_key=cek, + initialization_vector=iv + ) + else: + block_ids = _upload_blob_substream_blocks( + blob_service=self, + container_name=container_name, + blob_name=blob_name, + blob_size=count, + block_size=self.MAX_BLOCK_SIZE, + stream=stream, + max_connections=max_connections, + progress_callback=progress_callback, + validate_content=validate_content, + lease_id=lease_id, + uploader_class=_BlockBlobChunkUploader, + timeout=timeout, + ) + + return self._put_block_list( + container_name=container_name, + blob_name=blob_name, + block_list=block_ids, + content_settings=content_settings, + metadata=metadata, + validate_content=validate_content, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout, + encryption_data=encryption_data + ) + + def create_blob_from_bytes( + self, container_name, blob_name, blob, index=0, count=None, + content_settings=None, metadata=None, validate_content=False, + progress_callback=None, max_connections=2, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Creates a new blob from an array of bytes, or updates the content + of an existing blob, with automatic chunking and progress + notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param bytes blob: + Content of blob as an array of bytes. + :param int index: + Start index in the array of bytes. + :param int count: + Number of bytes to upload. Set to None or negative value to upload + all bytes starting from index. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set blob properties. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each chunk of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use when the blob size exceeds + 64MB. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: ETag and last modified properties for the Block Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('blob', blob) + _validate_not_none('index', index) + _validate_type_bytes('blob', blob) + + if index < 0: + raise IndexError(_ERROR_VALUE_NEGATIVE.format('index')) + + if count is None or count < 0: + count = len(blob) - index + + stream = BytesIO(blob) + stream.seek(index) + + return self.create_blob_from_stream( + container_name=container_name, + blob_name=blob_name, + stream=stream, + count=count, + content_settings=content_settings, + metadata=metadata, + validate_content=validate_content, + progress_callback=progress_callback, + max_connections=max_connections, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout, + use_byte_buffer=True + ) + + def create_blob_from_text( + self, container_name, blob_name, text, encoding='utf-8', + content_settings=None, metadata=None, validate_content=False, + progress_callback=None, max_connections=2, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None): + ''' + Creates a new blob from str/unicode, or updates the content of an + existing blob, with automatic chunking and progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param str text: + Text to upload to the blob. + :param str encoding: + Python encoding to use to convert the text to bytes. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set blob properties. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each chunk of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use when the blob size exceeds + 64MB. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :return: ETag and last modified properties for the Block Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('text', text) + + if not isinstance(text, bytes): + _validate_not_none('encoding', encoding) + text = text.encode(encoding) + + return self.create_blob_from_bytes( + container_name=container_name, + blob_name=blob_name, + blob=text, + index=0, + count=len(text), + content_settings=content_settings, + metadata=metadata, + validate_content=validate_content, + lease_id=lease_id, + progress_callback=progress_callback, + max_connections=max_connections, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout) + + def set_standard_blob_tier( + self, container_name, blob_name, standard_blob_tier, timeout=None): + ''' + Sets the block blob tiers on the blob. This API is only supported for block blobs on standard storage accounts. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to update. + :param StandardBlobTier standard_blob_tier: + A standard blob tier value to set the blob to. For this version of the library, + this is only applicable to block blobs on standard storage accounts. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('standard_blob_tier', standard_blob_tier) + + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'tier', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-access-tier': _to_str(standard_blob_tier) + } + + self._perform_request(request) + + # -----Helper methods------------------------------------ + def _put_blob(self, container_name, blob_name, blob, content_settings=None, + metadata=None, validate_content=False, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, + timeout=None): + ''' + Creates a blob or updates an existing blob. + + See create_blob_from_* for high level + functions that handle the creation and upload of large blobs with + automatic chunking and progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param bytes blob: + Content of blob as bytes (size < 64MB). For larger size, you + must call put_block and put_block_list to set content of blob. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set properties on the blob. + :param metadata: + Name-value pairs associated with the blob as metadata. + :param bool validate_content: + If true, calculates an MD5 hash of the blob content. The storage + service checks the hash of the content that has arrived + with the hash that was sent. This is primarily valuable for detecting + bitflips on the wire if using http instead of https as https (the default) + will already validate. Note that this MD5 hash is not stored with the + blob. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the new Block Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_encryption_required(self.require_encryption, self.key_encryption_key) + + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = {'timeout': _int_to_str(timeout)} + request.headers = { + 'x-ms-blob-type': _to_str(self.blob_type), + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match) + } + _add_metadata_headers(metadata, request) + if content_settings is not None: + request.headers.update(content_settings._to_headers()) + blob = _get_data_bytes_only('blob', blob) + if self.key_encryption_key: + encryption_data, blob = _encrypt_blob(blob, self.key_encryption_key) + request.headers['x-ms-meta-encryptiondata'] = encryption_data + request.body = blob + + if validate_content: + computed_md5 = _get_content_md5(request.body) + request.headers['Content-MD5'] = _to_str(computed_md5) + + return self._perform_request(request, _parse_base_properties) + + def _put_block(self, container_name, blob_name, block, block_id, + validate_content=False, lease_id=None, timeout=None): + ''' + See put_block for more details. This helper method + allows for encryption or other such special behavior because + it is safely handled by the library. These behaviors are + prohibited in the public version of this function. + ''' + + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('block', block) + _validate_not_none('block_id', block_id) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'block', + 'blockid': _encode_base64(_to_str(block_id)), + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id) + } + request.body = _get_data_bytes_or_stream_only('block', block) + if hasattr(request.body, 'read'): + if _len_plus(request.body) is None: + try: + data = b'' + for chunk in iter(lambda: request.body.read(4096), b""): + data += chunk + request.body = data + except AttributeError: + raise ValueError(_ERROR_VALUE_SHOULD_BE_STREAM.format('request.body')) + + if validate_content: + computed_md5 = _get_content_md5(request.body) + request.headers['Content-MD5'] = _to_str(computed_md5) + + self._perform_request(request) + + def _put_block_list( + self, container_name, blob_name, block_list, content_settings=None, + metadata=None, validate_content=False, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, + timeout=None, encryption_data=None): + ''' + See put_block_list for more details. This helper method + allows for encryption or other such special behavior because + it is safely handled by the library. These behaviors are + prohibited in the public version of this function. + :param str encryption_data: + A JSON formatted string containing the encryption metadata generated for this + blob if it was encrypted all at once upon upload. This should only be passed + in by internal methods. + ''' + + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('block_list', block_list) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'blocklist', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + _add_metadata_headers(metadata, request) + if content_settings is not None: + request.headers.update(content_settings._to_headers()) + request.body = _get_request_body( + _convert_block_list_to_xml(block_list)) + + if validate_content: + computed_md5 = _get_content_md5(request.body) + request.headers['Content-MD5'] = _to_str(computed_md5) + + if encryption_data is not None: + request.headers['x-ms-meta-encryptiondata'] = encryption_data + + return self._perform_request(request, _parse_base_properties) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/models.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/models.py new file mode 100644 index 00000000000..1f9cd20cb28 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/models.py @@ -0,0 +1,755 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from ..common._common_conversion import _to_str + + +class Container(object): + ''' + Blob container class. + + :ivar str name: + The name of the container. + :ivar metadata: + A dict containing name-value pairs associated with the container as metadata. + This var is set to None unless the include=metadata param was included + for the list containers operation. If this parameter was specified but the + container has no metadata, metadata will be set to an empty dictionary. + :vartype metadata: dict(str, str) + :ivar ContainerProperties properties: + System properties for the container. + ''' + + def __init__(self, name=None, props=None, metadata=None): + self.name = name + self.properties = props or ContainerProperties() + self.metadata = metadata + + +class ContainerProperties(object): + ''' + Blob container's properties class. + + :ivar datetime last_modified: + A datetime object representing the last time the container was modified. + :ivar str etag: + The ETag contains a value that you can use to perform operations + conditionally. + :ivar LeaseProperties lease: + Stores all the lease information for the container. + ''' + + def __init__(self): + self.last_modified = None + self.etag = None + self.lease = LeaseProperties() + self.public_access = None + + +class Blob(object): + ''' + Blob class. + + :ivar str name: + Name of blob. + :ivar str snapshot: + A DateTime value that uniquely identifies the snapshot. The value of + this header indicates the snapshot version, and may be used in + subsequent requests to access the snapshot. + :ivar content: + Blob content. + :vartype content: str or bytes + :ivar BlobProperties properties: + Stores all the system properties for the blob. + :ivar metadata: + Name-value pairs associated with the blob as metadata. + :ivar bool deleted: + Specify whether the blob was soft deleted. + In other words, if the blob is being retained by the delete retention policy, + this field would be True. The blob could be undeleted or it will be garbage collected after the specified + time period. + ''' + + def __init__(self, name=None, snapshot=None, content=None, props=None, metadata=None, deleted=False): + self.name = name + self.snapshot = snapshot + self.content = content + self.properties = props or BlobProperties() + self.metadata = metadata + self.deleted = deleted + + +class BlobProperties(object): + ''' + Blob Properties + + :ivar str blob_type: + String indicating this blob's type. + :ivar datetime last_modified: + A datetime object representing the last time the blob was modified. + :ivar str etag: + The ETag contains a value that you can use to perform operations + conditionally. + :ivar int content_length: + The length of the content returned. If the entire blob was requested, + the length of blob in bytes. If a subset of the blob was requested, the + length of the returned subset. + :ivar str content_range: + Indicates the range of bytes returned in the event that the client + requested a subset of the blob. + :ivar int append_blob_committed_block_count: + (For Append Blobs) Number of committed blocks in the blob. + :ivar int page_blob_sequence_number: + (For Page Blobs) Sequence number for page blob used for coordinating + concurrent writes. + :ivar bool server_encrypted: + Set to true if the blob is encrypted on the server. + :ivar ~azure.storage.blob.models.CopyProperties copy: + Stores all the copy properties for the blob. + :ivar ~azure.storage.blob.models.ContentSettings content_settings: + Stores all the content settings for the blob. + :ivar ~azure.storage.blob.models.LeaseProperties lease: + Stores all the lease information for the blob. + :ivar StandardBlobTier blob_tier: + Indicates the access tier of the blob. The hot tier is optimized + for storing data that is accessed frequently. The cool storage tier + is optimized for storing data that is infrequently accessed and stored + for at least a month. The archive tier is optimized for storing + data that is rarely accessed and stored for at least six months + with flexible latency requirements. + :ivar datetime blob_tier_change_time: + Indicates when the access tier was last changed. + :ivar bool blob_tier_inferred: + Indicates whether the access tier was inferred by the service. + If false, it indicates that the tier was set explicitly. + :ivar datetime deleted_time: + A datetime object representing the time at which the blob was deleted. + :ivar int remaining_retention_days: + The number of days that the blob will be retained before being permanently deleted by the service. + ''' + + def __init__(self): + self.blob_type = None + self.last_modified = None + self.etag = None + self.content_length = None + self.content_range = None + self.append_blob_committed_block_count = None + self.page_blob_sequence_number = None + self.server_encrypted = None + self.copy = CopyProperties() + self.content_settings = ContentSettings() + self.lease = LeaseProperties() + self.blob_tier = None + self.blob_tier_change_time = None + self.blob_tier_inferred = False + self.deleted_time = None + self.remaining_retention_days = None + + +class ContentSettings(object): + ''' + Used to store the content settings of a blob. + + :ivar str content_type: + The content type specified for the blob. If no content type was + specified, the default content type is application/octet-stream. + :ivar str content_encoding: + If the content_encoding has previously been set + for the blob, that value is stored. + :ivar str content_language: + If the content_language has previously been set + for the blob, that value is stored. + :ivar str content_disposition: + content_disposition conveys additional information about how to + process the response payload, and also can be used to attach + additional metadata. If content_disposition has previously been set + for the blob, that value is stored. + :ivar str cache_control: + If the cache_control has previously been set for + the blob, that value is stored. + :ivar str content_md5: + If the content_md5 has been set for the blob, this response + header is stored so that the client can check for message content + integrity. + ''' + + def __init__( + self, content_type=None, content_encoding=None, + content_language=None, content_disposition=None, + cache_control=None, content_md5=None): + self.content_type = content_type + self.content_encoding = content_encoding + self.content_language = content_language + self.content_disposition = content_disposition + self.cache_control = cache_control + self.content_md5 = content_md5 + + def _to_headers(self): + return { + 'x-ms-blob-cache-control': _to_str(self.cache_control), + 'x-ms-blob-content-type': _to_str(self.content_type), + 'x-ms-blob-content-disposition': _to_str(self.content_disposition), + 'x-ms-blob-content-md5': _to_str(self.content_md5), + 'x-ms-blob-content-encoding': _to_str(self.content_encoding), + 'x-ms-blob-content-language': _to_str(self.content_language), + } + + +class CopyProperties(object): + ''' + Blob Copy Properties. + + :ivar str id: + String identifier for the last attempted Copy Blob operation where this blob + was the destination blob. This header does not appear if this blob has never + been the destination in a Copy Blob operation, or if this blob has been + modified after a concluded Copy Blob operation using Set Blob Properties, + Put Blob, or Put Block List. + :ivar str source: + URL up to 2 KB in length that specifies the source blob used in the last attempted + Copy Blob operation where this blob was the destination blob. This header does not + appear if this blob has never been the destination in a Copy Blob operation, or if + this blob has been modified after a concluded Copy Blob operation using + Set Blob Properties, Put Blob, or Put Block List. + :ivar str status: + State of the copy operation identified by Copy ID, with these values: + success: + Copy completed successfully. + pending: + Copy is in progress. Check copy_status_description if intermittent, + non-fatal errors impede copy progress but don't cause failure. + aborted: + Copy was ended by Abort Copy Blob. + failed: + Copy failed. See copy_status_description for failure details. + :ivar str progress: + Contains the number of bytes copied and the total bytes in the source in the last + attempted Copy Blob operation where this blob was the destination blob. Can show + between 0 and Content-Length bytes copied. + :ivar datetime completion_time: + Conclusion time of the last attempted Copy Blob operation where this blob was the + destination blob. This value can specify the time of a completed, aborted, or + failed copy attempt. + :ivar str status_description: + only appears when x-ms-copy-status is failed or pending. Describes cause of fatal + or non-fatal copy operation failure. + ''' + + def __init__(self): + self.id = None + self.source = None + self.status = None + self.progress = None + self.completion_time = None + self.status_description = None + + +class LeaseProperties(object): + ''' + Blob Lease Properties. + + :ivar str status: + The lease status of the blob. + Possible values: locked|unlocked + :ivar str state: + Lease state of the blob. + Possible values: available|leased|expired|breaking|broken + :ivar str duration: + When a blob is leased, specifies whether the lease is of infinite or fixed duration. + ''' + + def __init__(self): + self.status = None + self.state = None + self.duration = None + + +class BlobPrefix(object): + ''' + BlobPrefix objects may potentially returned in the blob list when + :func:`~azure.storage.blob.baseblobservice.BaseBlobService.list_blobs` is + used with a delimiter. Prefixes can be thought of as virtual blob directories. + + :ivar str name: The name of the blob prefix. + ''' + + def __init__(self): + self.name = None + + +class BlobBlockState(object): + '''Block blob block types.''' + + Committed = 'Committed' + '''Committed blocks.''' + + Latest = 'Latest' + '''Latest blocks.''' + + Uncommitted = 'Uncommitted' + '''Uncommitted blocks.''' + + +class BlobBlock(object): + ''' + BlockBlob Block class. + + :ivar str id: + Block id. + :ivar str state: + Block state. + Possible valuse: committed|uncommitted + :ivar int size: + Block size in bytes. + ''' + + def __init__(self, id=None, state=BlobBlockState.Latest): + self.id = id + self.state = state + + def _set_size(self, size): + self.size = size + + +class BlobBlockList(object): + ''' + Blob Block List class. + + :ivar committed_blocks: + List of committed blocks. + :vartype committed_blocks: list(:class:`~azure.storage.blob.models.BlobBlock`) + :ivar uncommitted_blocks: + List of uncommitted blocks. + :vartype uncommitted_blocks: list(:class:`~azure.storage.blob.models.BlobBlock`) + ''' + + def __init__(self): + self.committed_blocks = list() + self.uncommitted_blocks = list() + + +class PageRange(object): + ''' + Page Range for page blob. + + :ivar int start: + Start of page range in bytes. + :ivar int end: + End of page range in bytes. + :ivar bool is_cleared: + Indicates if a page range is cleared or not. Only applicable + for get_page_range_diff API. + ''' + + def __init__(self, start=None, end=None, is_cleared=False): + self.start = start + self.end = end + self.is_cleared = is_cleared + + +class ResourceProperties(object): + ''' + Base response for a resource request. + + :ivar str etag: + Opaque etag value that can be used to check if resource + has been modified. + :ivar datetime last_modified: + Datetime for last time resource was modified. + ''' + + def __init__(self): + self.last_modified = None + self.etag = None + + +class AppendBlockProperties(ResourceProperties): + ''' + Response for an append block request. + + :ivar int append_offset: + Position to start next append. + :ivar int committed_block_count: + Number of committed append blocks. + ''' + + def __init__(self): + super(ResourceProperties, self).__init__() + self.append_offset = None + self.committed_block_count = None + + +class PageBlobProperties(ResourceProperties): + ''' + Response for a page request. + + :ivar int sequence_number: + Identifer for page blobs to help handle concurrent writes. + ''' + + def __init__(self): + super(ResourceProperties, self).__init__() + self.sequence_number = None + + +class PublicAccess(object): + ''' + Specifies whether data in the container may be accessed publicly and the level of access. + ''' + + OFF = 'off' + ''' + Specifies that there is no public read access for both the container and blobs within the container. + Clients cannot enumerate the containers within the storage account as well as the blobs within the container. + ''' + + Blob = 'blob' + ''' + Specifies public read access for blobs. Blob data within this container can be read + via anonymous request, but container data is not available. Clients cannot enumerate + blobs within the container via anonymous request. + ''' + + Container = 'container' + ''' + Specifies full public read access for container and blob data. Clients can enumerate + blobs within the container via anonymous request, but cannot enumerate containers + within the storage account. + ''' + + +class DeleteSnapshot(object): + ''' + Required if the blob has associated snapshots. Specifies how to handle the snapshots. + ''' + + Include = 'include' + ''' + Delete the base blob and all of its snapshots. + ''' + + Only = 'only' + ''' + Delete only the blob's snapshots and not the blob itself. + ''' + + +class BlockListType(object): + ''' + Specifies whether to return the list of committed blocks, the list of uncommitted + blocks, or both lists together. + ''' + + All = 'all' + '''Both committed and uncommitted blocks.''' + + Committed = 'committed' + '''Committed blocks.''' + + Uncommitted = 'uncommitted' + '''Uncommitted blocks.''' + + +class SequenceNumberAction(object): + '''Sequence number actions.''' + + Increment = 'increment' + ''' + Increments the value of the sequence number by 1. If specifying this option, + do not include the x-ms-blob-sequence-number header. + ''' + + Max = 'max' + ''' + Sets the sequence number to be the higher of the value included with the + request and the value currently stored for the blob. + ''' + + Update = 'update' + '''Sets the sequence number to the value included with the request.''' + + +class _LeaseActions(object): + '''Actions for a lease.''' + + Acquire = 'acquire' + '''Acquire the lease.''' + + Break = 'break' + '''Break the lease.''' + + Change = 'change' + '''Change the lease ID.''' + + Release = 'release' + '''Release the lease.''' + + Renew = 'renew' + '''Renew the lease.''' + + +class _BlobTypes(object): + '''Blob type options.''' + + AppendBlob = 'AppendBlob' + '''Append blob type.''' + + BlockBlob = 'BlockBlob' + '''Block blob type.''' + + PageBlob = 'PageBlob' + '''Page blob type.''' + + +class Include(object): + ''' + Specifies the datasets to include in the blob list response. + + :ivar ~azure.storage.blob.models.Include Include.COPY: + Specifies that metadata related to any current or previous Copy Blob operation + should be included in the response. + :ivar ~azure.storage.blob.models.Include Include.METADATA: + Specifies that metadata be returned in the response. + :ivar ~azure.storage.blob.models.Include Include.SNAPSHOTS: + Specifies that snapshots should be included in the enumeration. + :ivar ~azure.storage.blob.models.Include Include.UNCOMMITTED_BLOBS: + Specifies that blobs for which blocks have been uploaded, but which have not + been committed using Put Block List, be included in the response. + :ivar ~azure.storage.blob.models.Include Include.DELETED: + Specifies that deleted blobs should be returned in the response. + ''' + + def __init__(self, snapshots=False, metadata=False, uncommitted_blobs=False, + copy=False, deleted=False, _str=None): + ''' + :param bool snapshots: + Specifies that snapshots should be included in the enumeration. + :param bool metadata: + Specifies that metadata be returned in the response. + :param bool uncommitted_blobs: + Specifies that blobs for which blocks have been uploaded, but which have + not been committed using Put Block List, be included in the response. + :param bool copy: + Specifies that metadata related to any current or previous Copy Blob + operation should be included in the response. + :param bool deleted: + Specifies that deleted blobs should be returned in the response. + :param str _str: + A string representing the includes. + ''' + if not _str: + _str = '' + components = _str.split(',') + self.snapshots = snapshots or ('snapshots' in components) + self.metadata = metadata or ('metadata' in components) + self.uncommitted_blobs = uncommitted_blobs or ('uncommittedblobs' in components) + self.copy = copy or ('copy' in components) + self.deleted = deleted or ('deleted' in components) + + def __or__(self, other): + return Include(_str=str(self) + str(other)) + + def __add__(self, other): + return Include(_str=str(self) + str(other)) + + def __str__(self): + include = (('snapshots,' if self.snapshots else '') + + ('metadata,' if self.metadata else '') + + ('uncommittedblobs,' if self.uncommitted_blobs else '') + + ('copy,' if self.copy else '') + + ('deleted,' if self.deleted else '')) + return include.rstrip(',') + + +Include.COPY = Include(copy=True) +Include.METADATA = Include(metadata=True) +Include.SNAPSHOTS = Include(snapshots=True) +Include.UNCOMMITTED_BLOBS = Include(uncommitted_blobs=True) +Include.DELETED = Include(deleted=True) + + +class BlobPermissions(object): + ''' + BlobPermissions class to be used with + :func:`~azure.storage.blob.baseblobservice.BaseBlobService.generate_blob_shared_access_signature` API. + + :ivar BlobPermissions BlobPermissions.ADD: + Add a block to an append blob. + :ivar BlobPermissions BlobPermissions.CREATE: + Write a new blob, snapshot a blob, or copy a blob to a new blob. + :ivar BlobPermissions BlobPermissions.DELETE: + Delete the blob. + :ivar BlobPermissions BlobPermissions.READ: + Read the content, properties, metadata and block list. Use the blob as the source of a copy operation. + :ivar BlobPermissions BlobPermissions.WRITE: + Create or write content, properties, metadata, or block list. Snapshot or lease + the blob. Resize the blob (page blob only). Use the blob as the destination of a + copy operation within the same account. + ''' + + def __init__(self, read=False, add=False, create=False, write=False, + delete=False, _str=None): + ''' + :param bool read: + Read the content, properties, metadata and block list. Use the blob as + the source of a copy operation. + :param bool add: + Add a block to an append blob. + :param bool create: + Write a new blob, snapshot a blob, or copy a blob to a new blob. + :param bool write: + Create or write content, properties, metadata, or block list. Snapshot + or lease the blob. Resize the blob (page blob only). Use the blob as the + destination of a copy operation within the same account. + :param bool delete: + Delete the blob. + :param str _str: + A string representing the permissions. + ''' + if not _str: + _str = '' + self.read = read or ('r' in _str) + self.add = add or ('a' in _str) + self.create = create or ('c' in _str) + self.write = write or ('w' in _str) + self.delete = delete or ('d' in _str) + + def __or__(self, other): + return BlobPermissions(_str=str(self) + str(other)) + + def __add__(self, other): + return BlobPermissions(_str=str(self) + str(other)) + + def __str__(self): + return (('r' if self.read else '') + + ('a' if self.add else '') + + ('c' if self.create else '') + + ('w' if self.write else '') + + ('d' if self.delete else '')) + + +BlobPermissions.ADD = BlobPermissions(add=True) +BlobPermissions.CREATE = BlobPermissions(create=True) +BlobPermissions.DELETE = BlobPermissions(delete=True) +BlobPermissions.READ = BlobPermissions(read=True) +BlobPermissions.WRITE = BlobPermissions(write=True) + + +class ContainerPermissions(object): + ''' + ContainerPermissions class to be used with :func:`~azure.storage.blob.baseblobservice.BaseBlobService.generate_container_shared_access_signature` + API and for the AccessPolicies used with :func:`~azure.storage.blob.baseblobservice.BaseBlobService.set_container_acl`. + + :ivar ContainerPermissions ContainerPermissions.DELETE: + Delete any blob in the container. Note: You cannot grant permissions to + delete a container with a container SAS. Use an account SAS instead. + :ivar ContainerPermissions ContainerPermissions.LIST: + List blobs in the container. + :ivar ContainerPermissions ContainerPermissions.READ: + Read the content, properties, metadata or block list of any blob in the + container. Use any blob in the container as the source of a copy operation. + :ivar ContainerPermissions ContainerPermissions.WRITE: + For any blob in the container, create or write content, properties, + metadata, or block list. Snapshot or lease the blob. Resize the blob + (page blob only). Use the blob as the destination of a copy operation + within the same account. Note: You cannot grant permissions to read or + write container properties or metadata, nor to lease a container, with + a container SAS. Use an account SAS instead. + ''' + + def __init__(self, read=False, write=False, delete=False, list=False, + _str=None): + ''' + :param bool read: + Read the content, properties, metadata or block list of any blob in the + container. Use any blob in the container as the source of a copy operation. + :param bool write: + For any blob in the container, create or write content, properties, + metadata, or block list. Snapshot or lease the blob. Resize the blob + (page blob only). Use the blob as the destination of a copy operation + within the same account. Note: You cannot grant permissions to read or + write container properties or metadata, nor to lease a container, with + a container SAS. Use an account SAS instead. + :param bool delete: + Delete any blob in the container. Note: You cannot grant permissions to + delete a container with a container SAS. Use an account SAS instead. + :param bool list: + List blobs in the container. + :param str _str: + A string representing the permissions. + ''' + if not _str: + _str = '' + self.read = read or ('r' in _str) + self.write = write or ('w' in _str) + self.delete = delete or ('d' in _str) + self.list = list or ('l' in _str) + + def __or__(self, other): + return ContainerPermissions(_str=str(self) + str(other)) + + def __add__(self, other): + return ContainerPermissions(_str=str(self) + str(other)) + + def __str__(self): + return (('r' if self.read else '') + + ('w' if self.write else '') + + ('d' if self.delete else '') + + ('l' if self.list else '')) + + +ContainerPermissions.DELETE = ContainerPermissions(delete=True) +ContainerPermissions.LIST = ContainerPermissions(list=True) +ContainerPermissions.READ = ContainerPermissions(read=True) +ContainerPermissions.WRITE = ContainerPermissions(write=True) + + +class PremiumPageBlobTier(object): + ''' + Specifies the page blob tier to set the blob to. This is only applicable to page + blobs on premium storage accounts. + Please take a look at https://docs.microsoft.com/en-us/azure/storage/storage-premium-storage#scalability-and-performance-targets + for detailed information on the corresponding IOPS and throughtput per PageBlobTier. + ''' + + P4 = 'P4' + ''' P4 Tier ''' + + P6 = 'P6' + ''' P6 Tier ''' + + P10 = 'P10' + ''' P10 Tier ''' + + P20 = 'P20' + ''' P20 Tier ''' + + P30 = 'P30' + ''' P30 Tier ''' + + P40 = 'P40' + ''' P40 Tier ''' + + P50 = 'P50' + ''' P50 Tier ''' + + P60 = 'P60' + ''' P60 Tier ''' + + +class StandardBlobTier(object): + ''' + Specifies the blob tier to set the blob to. This is only applicable for block blobs on standard storage accounts. + ''' + + Archive = 'Archive' + ''' Archive ''' + + Cool = 'Cool' + ''' Cool ''' + + Hot = 'Hot' + ''' Hot ''' diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/pageblobservice.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/pageblobservice.py new file mode 100644 index 00000000000..cfeea646fa6 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/pageblobservice.py @@ -0,0 +1,1392 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys +from os import path + +from ..common._common_conversion import ( + _int_to_str, + _to_str, + _datetime_to_utc_string, + _get_content_md5, +) +from ..common._constants import ( + SERVICE_HOST_BASE, + DEFAULT_PROTOCOL, +) +from ..common._error import ( + _validate_not_none, + _validate_type_bytes, + _validate_encryption_required, + _validate_encryption_unsupported, + _ERROR_VALUE_NEGATIVE, +) +from ..common._http import HTTPRequest +from ..common._serialization import ( + _get_data_bytes_only, + _add_metadata_headers, +) +from ._deserialization import ( + _convert_xml_to_page_ranges, + _parse_page_properties, + _parse_base_properties, +) +from ._encryption import _generate_blob_encryption_data +from ._error import ( + _ERROR_PAGE_BLOB_SIZE_ALIGNMENT, +) +from ._serialization import ( + _get_path, + _validate_and_format_range_headers, +) +from ._upload_chunking import ( + _PageBlobChunkUploader, + _upload_blob_chunks, +) +from .baseblobservice import BaseBlobService +from .models import ( + _BlobTypes, + ResourceProperties) + +if sys.version_info >= (3,): + from io import BytesIO +else: + from cStringIO import StringIO as BytesIO + +# Keep this value sync with _ERROR_PAGE_BLOB_SIZE_ALIGNMENT +_PAGE_ALIGNMENT = 512 + + +class PageBlobService(BaseBlobService): + ''' + Page blobs are a collection of 512-byte pages optimized for random read and + write operations. To create a page blob, you initialize the page blob and + specify the maximum size the page blob will grow. To add or update the + contents of a page blob, you write a page or pages by specifying an offset + and a range that align to 512-byte page boundaries. A write to a page blob + can overwrite just one page, some pages, or up to 4 MB of the page blob. + Writes to page blobs happen in-place and are immediately committed to the + blob. The maximum size for a page blob is 8 TB. + + :ivar int MAX_PAGE_SIZE: + The size of the pages put by create_blob_from_* methods. Smaller pages + may be put if there is less data provided. The maximum page size the service + supports is 4MB. When using the create_blob_from_* methods, empty pages are skipped. + ''' + + MAX_PAGE_SIZE = 4 * 1024 * 1024 + + def __init__(self, account_name=None, account_key=None, sas_token=None, is_emulated=False, + protocol=DEFAULT_PROTOCOL, endpoint_suffix=SERVICE_HOST_BASE, custom_domain=None, + request_session=None, connection_string=None, socket_timeout=None, token_credential=None): + ''' + :param str account_name: + The storage account name. This is used to authenticate requests + signed with an account key and to construct the storage endpoint. It + is required unless a connection string is given, or if a custom + domain is used with anonymous authentication. + :param str account_key: + The storage account key. This is used for shared key authentication. + If neither account key or sas token is specified, anonymous access + will be used. + :param str sas_token: + A shared access signature token to use to authenticate requests + instead of the account key. If account key and sas token are both + specified, account key will be used to sign. If neither are + specified, anonymous access will be used. + :param bool is_emulated: + Whether to use the emulator. Defaults to False. If specified, will + override all other parameters besides connection string and request + session. + :param str protocol: + The protocol to use for requests. Defaults to https. + :param str endpoint_suffix: + The host base component of the url, minus the account name. Defaults + to Azure (core.windows.net). Override this to use the China cloud + (core.chinacloudapi.cn). + :param str custom_domain: + The custom domain to use. This can be set in the Azure Portal. For + example, 'www.mydomain.com'. + :param requests.Session request_session: + The session object to use for http requests. + :param str connection_string: + If specified, this will override all other parameters besides + request session. See + http://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/ + for the connection string format. + :param int socket_timeout: + If specified, this will override the default socket timeout. The timeout specified is in seconds. + See DEFAULT_SOCKET_TIMEOUT in _constants.py for the default value. + :param token_credential: + A token credential used to authenticate HTTPS requests. The token value + should be updated before its expiration. + :type `~..common.TokenCredential` + ''' + self.blob_type = _BlobTypes.PageBlob + super(PageBlobService, self).__init__( + account_name, account_key, sas_token, is_emulated, protocol, endpoint_suffix, + custom_domain, request_session, connection_string, socket_timeout, token_credential) + + def create_blob( + self, container_name, blob_name, content_length, content_settings=None, + sequence_number=None, metadata=None, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, timeout=None, premium_page_blob_tier=None): + ''' + Creates a new Page Blob. + + See create_blob_from_* for high level functions that handle the + creation and upload of large blobs with automatic chunking and + progress notifications. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param int content_length: + Required. This header specifies the maximum size + for the page blob, up to 1 TB. The page blob size must be aligned + to a 512-byte boundary. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set properties on the blob. + :param int sequence_number: + The sequence number is a user-controlled value that you can use to + track requests. The value of the sequence number must be between 0 + and 2^63 - 1.The default value is 0. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :param PremiumPageBlobTier premium_page_blob_tier: + A page blob tier value to set the blob to. The tier correlates to the size of the + blob and number of allowed IOPS. This is only applicable to page blobs on + premium storage accounts. + :return: ETag and last modified properties for the new Page Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + return self._create_blob( + container_name, + blob_name, + content_length, + content_settings=content_settings, + sequence_number=sequence_number, + metadata=metadata, + lease_id=lease_id, + premium_page_blob_tier=premium_page_blob_tier, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout + ) + + def incremental_copy_blob(self, container_name, blob_name, copy_source, + metadata=None, destination_if_modified_since=None, destination_if_unmodified_since=None, + destination_if_match=None, destination_if_none_match=None, destination_lease_id=None, + source_lease_id=None, timeout=None): + ''' + Copies an incremental copy of a blob asynchronously. This operation returns a copy operation + properties object, including a copy ID you can use to check or abort the + copy operation. The Blob service copies blobs on a best-effort basis. + + The source blob for an incremental copy operation must be a page blob. + Call get_blob_properties on the destination blob to check the status of the copy operation. + The final blob will be committed when the copy completes. + + :param str container_name: + Name of the destination container. The container must exist. + :param str blob_name: + Name of the destination blob. If the destination blob exists, it will + be overwritten. Otherwise, it will be created. + :param str copy_source: + A URL of up to 2 KB in length that specifies an Azure page blob. + The value should be URL-encoded as it would appear in a request URI. + The copy source must be a snapshot and include a valid SAS token or be public. + Example: + https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=&sastoken + :param metadata: + Name-value pairs associated with the blob as metadata. If no name-value + pairs are specified, the operation will copy the metadata from the + source blob or file to the destination blob. If one or more name-value + pairs are specified, the destination blob is created with the specified + metadata, and metadata is not copied from the source blob or file. + :type metadata: dict(str, str). + :param datetime destination_if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only + if the destination blob has been modified since the specified date/time. + If the destination blob has not been modified, the Blob service returns + status code 412 (Precondition Failed). + :param datetime destination_if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only if the destination blob + has not been modified since the specified ate/time. If the destination blob + has been modified, the Blob service returns status code 412 (Precondition Failed). + :param ETag destination_if_match: + An ETag value, or the wildcard character (*). Specify an ETag value for + this conditional header to copy the blob only if the specified ETag value + matches the ETag value for an existing destination blob. If the ETag for + the destination blob does not match the ETag specified for If-Match, the + Blob service returns status code 412 (Precondition Failed). + :param ETag destination_if_none_match: + An ETag value, or the wildcard character (*). Specify an ETag value for + this conditional header to copy the blob only if the specified ETag value + does not match the ETag value for the destination blob. Specify the wildcard + character (*) to perform the operation only if the destination blob does not + exist. If the specified condition isn't met, the Blob service returns status + code 412 (Precondition Failed). + :param str destination_lease_id: + The lease ID specified for this header must match the lease ID of the + destination blob. If the request does not include the lease ID or it is not + valid, the operation fails with status code 412 (Precondition Failed). + :param str source_lease_id: + Specify this to perform the Copy Blob operation only if + the lease ID given matches the active lease ID of the source blob. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: Copy operation properties such as status, source, and ID. + :rtype: :class:`~azure.storage.blob.models.CopyProperties` + ''' + return self._copy_blob(container_name, blob_name, copy_source, + metadata, + source_if_modified_since=None, source_if_unmodified_since=None, + source_if_match=None, source_if_none_match=None, + destination_if_modified_since=destination_if_modified_since, + destination_if_unmodified_since=destination_if_unmodified_since, + destination_if_match=destination_if_match, + destination_if_none_match=destination_if_none_match, + destination_lease_id=destination_lease_id, + source_lease_id=source_lease_id, timeout=timeout, + incremental_copy=True) + + def update_page( + self, container_name, blob_name, page, start_range, end_range, + validate_content=False, lease_id=None, if_sequence_number_lte=None, + if_sequence_number_lt=None, if_sequence_number_eq=None, + if_modified_since=None, if_unmodified_since=None, + if_match=None, if_none_match=None, timeout=None): + ''' + Updates a range of pages. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param bytes page: + Content of the page. + :param int start_range: + Start of byte range to use for writing to a section of the blob. + Pages must be aligned with 512-byte boundaries, the start offset + must be a modulus of 512 and the end offset must be a modulus of + 512-1. Examples of valid byte ranges are 0-511, 512-1023, etc. + :param int end_range: + End of byte range to use for writing to a section of the blob. + Pages must be aligned with 512-byte boundaries, the start offset + must be a modulus of 512 and the end offset must be a modulus of + 512-1. Examples of valid byte ranges are 0-511, 512-1023, etc. + :param bool validate_content: + If true, calculates an MD5 hash of the page content. The storage + service checks the hash of the content that has arrived + with the hash that was sent. This is primarily valuable for detecting + bitflips on the wire if using http instead of https as https (the default) + will already validate. Note that this MD5 hash is not stored with the + blob. + :param str lease_id: + Required if the blob has an active lease. + :param int if_sequence_number_lte: + If the blob's sequence number is less than or equal to + the specified value, the request proceeds; otherwise it fails. + :param int if_sequence_number_lt: + If the blob's sequence number is less than the specified + value, the request proceeds; otherwise it fails. + :param int if_sequence_number_eq: + If the blob's sequence number is equal to the specified + value, the request proceeds; otherwise it fails. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify an ETag value for this conditional + header to write the page only if the blob's ETag value matches the + value specified. If the values do not match, the Blob service fails. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify an ETag value for this conditional + header to write the page only if the blob's ETag value does not + match the value specified. If the values are identical, the Blob + service fails. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Page Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + + _validate_encryption_unsupported(self.require_encryption, self.key_encryption_key) + + return self._update_page( + container_name, + blob_name, + page, + start_range, + end_range, + validate_content=validate_content, + lease_id=lease_id, + if_sequence_number_lte=if_sequence_number_lte, + if_sequence_number_lt=if_sequence_number_lt, + if_sequence_number_eq=if_sequence_number_eq, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout + ) + + def clear_page( + self, container_name, blob_name, start_range, end_range, + lease_id=None, if_sequence_number_lte=None, + if_sequence_number_lt=None, if_sequence_number_eq=None, + if_modified_since=None, if_unmodified_since=None, + if_match=None, if_none_match=None, timeout=None): + ''' + Clears a range of pages. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param int start_range: + Start of byte range to use for writing to a section of the blob. + Pages must be aligned with 512-byte boundaries, the start offset + must be a modulus of 512 and the end offset must be a modulus of + 512-1. Examples of valid byte ranges are 0-511, 512-1023, etc. + :param int end_range: + End of byte range to use for writing to a section of the blob. + Pages must be aligned with 512-byte boundaries, the start offset + must be a modulus of 512 and the end offset must be a modulus of + 512-1. Examples of valid byte ranges are 0-511, 512-1023, etc. + :param str lease_id: + Required if the blob has an active lease. + :param int if_sequence_number_lte: + If the blob's sequence number is less than or equal to + the specified value, the request proceeds; otherwise it fails. + :param int if_sequence_number_lt: + If the blob's sequence number is less than the specified + value, the request proceeds; otherwise it fails. + :param int if_sequence_number_eq: + If the blob's sequence number is equal to the specified + value, the request proceeds; otherwise it fails. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify an ETag value for this conditional + header to write the page only if the blob's ETag value matches the + value specified. If the values do not match, the Blob service fails. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify an ETag value for this conditional + header to write the page only if the blob's ETag value does not + match the value specified. If the values are identical, the Blob + service fails. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Page Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'page', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-page-write': 'clear', + 'x-ms-lease-id': _to_str(lease_id), + 'x-ms-if-sequence-number-le': _to_str(if_sequence_number_lte), + 'x-ms-if-sequence-number-lt': _to_str(if_sequence_number_lt), + 'x-ms-if-sequence-number-eq': _to_str(if_sequence_number_eq), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match) + } + _validate_and_format_range_headers( + request, + start_range, + end_range, + align_to_page=True) + + return self._perform_request(request, _parse_page_properties) + + def get_page_ranges( + self, container_name, blob_name, snapshot=None, start_range=None, + end_range=None, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, timeout=None): + ''' + Returns the list of valid page ranges for a Page Blob or snapshot + of a page blob. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that, + when present, specifies the blob snapshot to retrieve information + from. + :param int start_range: + Start of byte range to use for getting valid page ranges. + If no end_range is given, all bytes after the start_range will be searched. + Pages must be aligned with 512-byte boundaries, the start offset + must be a modulus of 512 and the end offset must be a modulus of + 512-1. Examples of valid byte ranges are 0-511, 512-, etc. + :param int end_range: + End of byte range to use for getting valid page ranges. + If end_range is given, start_range must be provided. + This range will return valid page ranges for from the offset start up to + offset end. + Pages must be aligned with 512-byte boundaries, the start offset + must be a modulus of 512 and the end offset must be a modulus of + 512-1. Examples of valid byte ranges are 0-511, 512-, etc. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: A list of valid Page Ranges for the Page Blob. + :rtype: list(:class:`~azure.storage.blob.models.PageRange`) + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'pagelist', + 'snapshot': _to_str(snapshot), + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + if start_range is not None: + _validate_and_format_range_headers( + request, + start_range, + end_range, + start_range_required=False, + end_range_required=False, + align_to_page=True) + + return self._perform_request(request, _convert_xml_to_page_ranges) + + def get_page_ranges_diff( + self, container_name, blob_name, previous_snapshot, snapshot=None, + start_range=None, end_range=None, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, timeout=None): + ''' + The response will include only the pages that are different between either a + recent snapshot or the current blob and a previous snapshot, including pages + that were cleared. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str previous_snapshot: + The snapshot parameter is an opaque DateTime value that + specifies a previous blob snapshot to be compared + against a more recent snapshot or the current blob. + :param str snapshot: + The snapshot parameter is an opaque DateTime value that + specifies a more recent blob snapshot to be compared + against a previous snapshot (previous_snapshot). + :param int start_range: + Start of byte range to use for getting different page ranges. + If no end_range is given, all bytes after the start_range will be searched. + Pages must be aligned with 512-byte boundaries, the start offset + must be a modulus of 512 and the end offset must be a modulus of + 512-1. Examples of valid byte ranges are 0-511, 512-, etc. + :param int end_range: + End of byte range to use for getting different page ranges. + If end_range is given, start_range must be provided. + This range will return valid page ranges for from the offset start up to + offset end. + Pages must be aligned with 512-byte boundaries, the start offset + must be a modulus of 512 and the end offset must be a modulus of + 512-1. Examples of valid byte ranges are 0-511, 512-, etc. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: A list of different Page Ranges for the Page Blob. + :rtype: list(:class:`~azure.storage.blob.models.PageRange`) + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('previous_snapshot', previous_snapshot) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'pagelist', + 'snapshot': _to_str(snapshot), + 'prevsnapshot': _to_str(previous_snapshot), + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + if start_range is not None: + _validate_and_format_range_headers( + request, + start_range, + end_range, + start_range_required=False, + end_range_required=False, + align_to_page=True) + + return self._perform_request(request, _convert_xml_to_page_ranges) + + def set_sequence_number( + self, container_name, blob_name, sequence_number_action, sequence_number=None, + lease_id=None, if_modified_since=None, if_unmodified_since=None, + if_match=None, if_none_match=None, timeout=None): + + ''' + Sets the blob sequence number. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param str sequence_number_action: + This property indicates how the service should modify the blob's sequence + number. See :class:`~azure.storage.blob.models.SequenceNumberAction` for more information. + :param str sequence_number: + This property sets the blob's sequence number. The sequence number is a + user-controlled property that you can use to track requests and manage + concurrency issues. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Page Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('sequence_number_action', sequence_number_action) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-blob-sequence-number': _to_str(sequence_number), + 'x-ms-sequence-number-action': _to_str(sequence_number_action), + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + + return self._perform_request(request, _parse_page_properties) + + def resize_blob( + self, container_name, blob_name, content_length, + lease_id=None, if_modified_since=None, if_unmodified_since=None, + if_match=None, if_none_match=None, timeout=None): + + ''' + Resizes a page blob to the specified size. If the specified value is less + than the current size of the blob, then all pages above the specified value + are cleared. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of existing blob. + :param int content_length: + Size to resize blob to. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: ETag and last modified properties for the updated Page Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('content_length', content_length) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-blob-content-length': _to_str(content_length), + 'x-ms-lease-id': _to_str(lease_id), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match), + } + + return self._perform_request(request, _parse_page_properties) + + # ----Convenience APIs----------------------------------------------------- + + def create_blob_from_path( + self, container_name, blob_name, file_path, content_settings=None, + metadata=None, validate_content=False, progress_callback=None, max_connections=2, + lease_id=None, if_modified_since=None, if_unmodified_since=None, + if_match=None, if_none_match=None, timeout=None, premium_page_blob_tier=None): + ''' + Creates a new blob from a file path, or updates the content of an + existing blob, with automatic chunking and progress notifications. + Empty chunks are skipped, while non-emtpy ones(even if only partly filled) are uploaded. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param str file_path: + Path of the file to upload as the blob content. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set blob properties. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each page of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :param premium_page_blob_tier: + A page blob tier value to set the blob to. The tier correlates to the size of the + blob and number of allowed IOPS. This is only applicable to page blobs on + premium storage accounts. + :return: ETag and last modified properties for the Page Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('file_path', file_path) + + count = path.getsize(file_path) + with open(file_path, 'rb') as stream: + return self.create_blob_from_stream( + container_name=container_name, + blob_name=blob_name, + stream=stream, + count=count, + content_settings=content_settings, + metadata=metadata, + validate_content=validate_content, + progress_callback=progress_callback, + max_connections=max_connections, + lease_id=lease_id, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout, + premium_page_blob_tier=premium_page_blob_tier) + + def create_blob_from_stream( + self, container_name, blob_name, stream, count, content_settings=None, + metadata=None, validate_content=False, progress_callback=None, + max_connections=2, lease_id=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, timeout=None, + premium_page_blob_tier=None): + ''' + Creates a new blob from a file/stream, or updates the content of an + existing blob, with automatic chunking and progress notifications. + Empty chunks are skipped, while non-emtpy ones(even if only partly filled) are uploaded. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param io.IOBase stream: + Opened file/stream to upload as the blob content. + :param int count: + Number of bytes to read from the stream. This is required, a page + blob cannot be created if the count is unknown. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set the blob properties. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each page of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use. Note that parallel upload + requires the stream to be seekable. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :param premium_page_blob_tier: + A page blob tier value to set the blob to. The tier correlates to the size of the + blob and number of allowed IOPS. This is only applicable to page blobs on + premium storage accounts. + :return: ETag and last modified properties for the Page Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('stream', stream) + _validate_not_none('count', count) + _validate_encryption_required(self.require_encryption, self.key_encryption_key) + + if count < 0: + raise ValueError(_ERROR_VALUE_NEGATIVE.format('count')) + + if count % _PAGE_ALIGNMENT != 0: + raise ValueError(_ERROR_PAGE_BLOB_SIZE_ALIGNMENT.format(count)) + + cek, iv, encryption_data = None, None, None + if self.key_encryption_key is not None: + cek, iv, encryption_data = _generate_blob_encryption_data(self.key_encryption_key) + + response = self._create_blob( + container_name=container_name, + blob_name=blob_name, + content_length=count, + content_settings=content_settings, + metadata=metadata, + lease_id=lease_id, + premium_page_blob_tier=premium_page_blob_tier, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout, + encryption_data=encryption_data + ) + + if count == 0: + return response + + # _upload_blob_chunks returns the block ids for block blobs so resource_properties + # is passed as a parameter to get the last_modified and etag for page and append blobs. + # this info is not needed for block_blobs since _put_block_list is called after which gets this info + resource_properties = ResourceProperties() + _upload_blob_chunks( + blob_service=self, + container_name=container_name, + blob_name=blob_name, + blob_size=count, + block_size=self.MAX_PAGE_SIZE, + stream=stream, + max_connections=max_connections, + progress_callback=progress_callback, + validate_content=validate_content, + lease_id=lease_id, + uploader_class=_PageBlobChunkUploader, + if_match=response.etag, + timeout=timeout, + content_encryption_key=cek, + initialization_vector=iv, + resource_properties=resource_properties + ) + + return resource_properties + + def create_blob_from_bytes( + self, container_name, blob_name, blob, index=0, count=None, + content_settings=None, metadata=None, validate_content=False, + progress_callback=None, max_connections=2, lease_id=None, + if_modified_since=None, if_unmodified_since=None, if_match=None, + if_none_match=None, timeout=None, premium_page_blob_tier=None): + ''' + Creates a new blob from an array of bytes, or updates the content + of an existing blob, with automatic chunking and progress + notifications. Empty chunks are skipped, while non-emtpy ones(even if only partly filled) are uploaded. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to create or update. + :param bytes blob: + Content of blob as an array of bytes. + :param int index: + Start index in the byte array. + :param int count: + Number of bytes to upload. Set to None or negative value to upload + all bytes starting from index. + :param ~azure.storage.blob.models.ContentSettings content_settings: + ContentSettings object used to set blob properties. + :param metadata: + Name-value pairs associated with the blob as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each page of the blob. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + blob. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far, and total is the + size of the blob, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use. + :param str lease_id: + Required if the blob has an active lease. + :param datetime if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only + if the resource has been modified since the specified time. + :param datetime if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this header to perform the operation only if + the resource has not been modified since the specified date/time. + :param str if_match: + An ETag value, or the wildcard character (*). Specify this header to perform + the operation only if the resource's ETag matches the value specified. + :param str if_none_match: + An ETag value, or the wildcard character (*). Specify this header + to perform the operation only if the resource's ETag does not match + the value specified. Specify the wildcard character (*) to perform + the operation only if the resource does not exist, and fail the + operation if it does exist. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :param premium_page_blob_tier: + A page blob tier value to set the blob to. The tier correlates to the size of the + blob and number of allowed IOPS. This is only applicable to page blobs on + premium storage accounts. + :return: ETag and last modified properties for the Page Blob + :rtype: :class:`~azure.storage.blob.models.ResourceProperties` + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('blob', blob) + _validate_type_bytes('blob', blob) + + if index < 0: + raise IndexError(_ERROR_VALUE_NEGATIVE.format('index')) + + if count is None or count < 0: + count = len(blob) - index + + stream = BytesIO(blob) + stream.seek(index) + + return self.create_blob_from_stream( + container_name=container_name, + blob_name=blob_name, + stream=stream, + count=count, + content_settings=content_settings, + metadata=metadata, + validate_content=validate_content, + lease_id=lease_id, + progress_callback=progress_callback, + max_connections=max_connections, + if_modified_since=if_modified_since, + if_unmodified_since=if_unmodified_since, + if_match=if_match, + if_none_match=if_none_match, + timeout=timeout, + premium_page_blob_tier=premium_page_blob_tier) + + def set_premium_page_blob_tier( + self, container_name, blob_name, premium_page_blob_tier, + timeout=None): + ''' + Sets the page blob tiers on the blob. This API is only supported for page blobs on premium accounts. + + :param str container_name: + Name of existing container. + :param str blob_name: + Name of blob to update. + :param PremiumPageBlobTier premium_page_blob_tier: + A page blob tier value to set the blob to. The tier correlates to the size of the + blob and number of allowed IOPS. This is only applicable to page blobs on + premium storage accounts. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + ''' + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('premium_page_blob_tier', premium_page_blob_tier) + + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'tier', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-access-tier': _to_str(premium_page_blob_tier) + } + + self._perform_request(request) + + def copy_blob(self, container_name, blob_name, copy_source, + metadata=None, + source_if_modified_since=None, + source_if_unmodified_since=None, + source_if_match=None, source_if_none_match=None, + destination_if_modified_since=None, + destination_if_unmodified_since=None, + destination_if_match=None, + destination_if_none_match=None, + destination_lease_id=None, + source_lease_id=None, timeout=None, + premium_page_blob_tier=None): + ''' + Copies a blob asynchronously. This operation returns a copy operation + properties object, including a copy ID you can use to check or abort the + copy operation. The Blob service copies blobs on a best-effort basis. + + The source blob for a copy operation must be a page blob. If the destination + blob already exists, it must be of the same blob type as the source blob. + Any existing destination blob will be overwritten. + The destination blob cannot be modified while a copy operation is in progress. + + When copying from a page blob, the Blob service creates a destination page + blob of the source blob's length, initially containing all zeroes. Then + the source page ranges are enumerated, and non-empty ranges are copied. + + If the tier on the source blob is larger than the tier being passed to this + copy operation or if the size of the blob exceeds the tier being passed to + this copy operation then the operation will fail. + + You can call get_blob_properties on the destination + blob to check the status of the copy operation. The final blob will be + committed when the copy completes. + + :param str container_name: + Name of the destination container. The container must exist. + :param str blob_name: + Name of the destination blob. If the destination blob exists, it will + be overwritten. Otherwise, it will be created. + :param str copy_source: + A URL of up to 2 KB in length that specifies an Azure file or blob. + The value should be URL-encoded as it would appear in a request URI. + If the source is in another account, the source must either be public + or must be authenticated via a shared access signature. If the source + is public, no authentication is required. + Examples: + https://myaccount.blob.core.windows.net/mycontainer/myblob + https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot= + https://otheraccount.blob.core.windows.net/mycontainer/myblob?sastoken + :param metadata: + Name-value pairs associated with the blob as metadata. If no name-value + pairs are specified, the operation will copy the metadata from the + source blob or file to the destination blob. If one or more name-value + pairs are specified, the destination blob is created with the specified + metadata, and metadata is not copied from the source blob or file. + :type metadata: dict(str, str). + :param datetime source_if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only if the source + blob has been modified since the specified date/time. + :param datetime source_if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only if the source blob + has not been modified since the specified date/time. + :param ETag source_if_match: + An ETag value, or the wildcard character (*). Specify this conditional + header to copy the source blob only if its ETag matches the value + specified. If the ETag values do not match, the Blob service returns + status code 412 (Precondition Failed). This header cannot be specified + if the source is an Azure File. + :param ETag source_if_none_match: + An ETag value, or the wildcard character (*). Specify this conditional + header to copy the blob only if its ETag does not match the value + specified. If the values are identical, the Blob service returns status + code 412 (Precondition Failed). This header cannot be specified if the + source is an Azure File. + :param datetime destination_if_modified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only + if the destination blob has been modified since the specified date/time. + If the destination blob has not been modified, the Blob service returns + status code 412 (Precondition Failed). + :param datetime destination_if_unmodified_since: + A DateTime value. Azure expects the date value passed in to be UTC. + If timezone is included, any non-UTC datetimes will be converted to UTC. + If a date is passed in without timezone info, it is assumed to be UTC. + Specify this conditional header to copy the blob only + if the destination blob has not been modified since the specified + date/time. If the destination blob has been modified, the Blob service + returns status code 412 (Precondition Failed). + :param ETag destination_if_match: + An ETag value, or the wildcard character (*). Specify an ETag value for + this conditional header to copy the blob only if the specified ETag value + matches the ETag value for an existing destination blob. If the ETag for + the destination blob does not match the ETag specified for If-Match, the + Blob service returns status code 412 (Precondition Failed). + :param ETag destination_if_none_match: + An ETag value, or the wildcard character (*). Specify an ETag value for + this conditional header to copy the blob only if the specified ETag value + does not match the ETag value for the destination blob. Specify the wildcard + character (*) to perform the operation only if the destination blob does not + exist. If the specified condition isn't met, the Blob service returns status + code 412 (Precondition Failed). + :param str destination_lease_id: + The lease ID specified for this header must match the lease ID of the + destination blob. If the request does not include the lease ID or it is not + valid, the operation fails with status code 412 (Precondition Failed). + :param str source_lease_id: + Specify this to perform the Copy Blob operation only if + the lease ID given matches the active lease ID of the source blob. + :param int timeout: + The timeout parameter is expressed in seconds. + :param PageBlobTier premium_page_blob_tier: + A page blob tier value to set on the destination blob. The tier correlates to + the size of the blob and number of allowed IOPS. This is only applicable to + page blobs on premium storage accounts. + If the tier on the source blob is larger than the tier being passed to this + copy operation or if the size of the blob exceeds the tier being passed to + this copy operation then the operation will fail. + :return: Copy operation properties such as status, source, and ID. + :rtype: :class:`~azure.storage.blob.models.CopyProperties` + ''' + return self._copy_blob(container_name, blob_name, copy_source, + metadata, premium_page_blob_tier, + source_if_modified_since, source_if_unmodified_since, + source_if_match, source_if_none_match, + destination_if_modified_since, + destination_if_unmodified_since, + destination_if_match, + destination_if_none_match, + destination_lease_id, + source_lease_id, timeout, + False) + + # -----Helper methods----------------------------------------------------- + + def _create_blob( + self, container_name, blob_name, content_length, content_settings=None, + sequence_number=None, metadata=None, lease_id=None, premium_page_blob_tier=None, if_modified_since=None, + if_unmodified_since=None, if_match=None, if_none_match=None, timeout=None, + encryption_data=None): + ''' + See create_blob for more details. This helper method + allows for encryption or other such special behavior because + it is safely handled by the library. These behaviors are + prohibited in the public version of this function. + :param str encryption_data: + The JSON formatted encryption metadata to upload as a part of the blob. + This should only be passed internally from other methods and only applied + when uploading entire blob contents immediately follows creation of the blob. + ''' + + _validate_not_none('container_name', container_name) + _validate_not_none('blob_name', blob_name) + _validate_not_none('content_length', content_length) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = {'timeout': _int_to_str(timeout)} + request.headers = { + 'x-ms-blob-type': _to_str(self.blob_type), + 'x-ms-blob-content-length': _to_str(content_length), + 'x-ms-lease-id': _to_str(lease_id), + 'x-ms-blob-sequence-number': _to_str(sequence_number), + 'x-ms-access-tier': _to_str(premium_page_blob_tier), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match) + } + _add_metadata_headers(metadata, request) + if content_settings is not None: + request.headers.update(content_settings._to_headers()) + + if encryption_data is not None: + request.headers['x-ms-meta-encryptiondata'] = encryption_data + + return self._perform_request(request, _parse_base_properties) + + def _update_page( + self, container_name, blob_name, page, start_range, end_range, + validate_content=False, lease_id=None, if_sequence_number_lte=None, + if_sequence_number_lt=None, if_sequence_number_eq=None, + if_modified_since=None, if_unmodified_since=None, + if_match=None, if_none_match=None, timeout=None): + ''' + See update_page for more details. This helper method + allows for encryption or other such special behavior because + it is safely handled by the library. These behaviors are + prohibited in the public version of this function. + ''' + + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(container_name, blob_name) + request.query = { + 'comp': 'page', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-page-write': 'update', + 'x-ms-lease-id': _to_str(lease_id), + 'x-ms-if-sequence-number-le': _to_str(if_sequence_number_lte), + 'x-ms-if-sequence-number-lt': _to_str(if_sequence_number_lt), + 'x-ms-if-sequence-number-eq': _to_str(if_sequence_number_eq), + 'If-Modified-Since': _datetime_to_utc_string(if_modified_since), + 'If-Unmodified-Since': _datetime_to_utc_string(if_unmodified_since), + 'If-Match': _to_str(if_match), + 'If-None-Match': _to_str(if_none_match) + } + _validate_and_format_range_headers( + request, + start_range, + end_range, + align_to_page=True) + request.body = _get_data_bytes_only('page', page) + + if validate_content: + computed_md5 = _get_content_md5(request.body) + request.headers['Content-MD5'] = _to_str(computed_md5) + + return self._perform_request(request, _parse_page_properties) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/sharedaccesssignature.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/sharedaccesssignature.py new file mode 100644 index 00000000000..472ce7875ce --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/blob/sharedaccesssignature.py @@ -0,0 +1,179 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +from ..common.sharedaccesssignature import ( + SharedAccessSignature, + _SharedAccessHelper, +) +from ._constants import X_MS_VERSION + + +class BlobSharedAccessSignature(SharedAccessSignature): + ''' + Provides a factory for creating blob and container access + signature tokens with a common account name and account key. Users can either + use the factory or can construct the appropriate service and use the + generate_*_shared_access_signature method directly. + ''' + + def __init__(self, account_name, account_key): + ''' + :param str account_name: + The storage account name used to generate the shared access signatures. + :param str account_key: + The access key to generate the shares access signatures. + ''' + super(BlobSharedAccessSignature, self).__init__(account_name, account_key, x_ms_version=X_MS_VERSION) + + def generate_blob(self, container_name, blob_name, permission=None, + expiry=None, start=None, id=None, ip=None, protocol=None, + cache_control=None, content_disposition=None, + content_encoding=None, content_language=None, + content_type=None): + ''' + Generates a shared access signature for the blob. + Use the returned signature with the sas_token parameter of any BlobService. + + :param str container_name: + Name of container. + :param str blob_name: + Name of blob. + :param BlobPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use + set_blob_service_properties. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + ''' + resource_path = container_name + '/' + blob_name + + sas = _SharedAccessHelper() + sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) + sas.add_id(id) + sas.add_resource('b') + sas.add_override_response_headers(cache_control, content_disposition, + content_encoding, content_language, + content_type) + sas.add_resource_signature(self.account_name, self.account_key, 'blob', resource_path) + + return sas.get_token() + + def generate_container(self, container_name, permission=None, expiry=None, + start=None, id=None, ip=None, protocol=None, + cache_control=None, content_disposition=None, + content_encoding=None, content_language=None, + content_type=None): + ''' + Generates a shared access signature for the container. + Use the returned signature with the sas_token parameter of any BlobService. + + :param str container_name: + Name of container. + :param ContainerPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use + set_blob_service_properties. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + ''' + sas = _SharedAccessHelper() + sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) + sas.add_id(id) + sas.add_resource('c') + sas.add_override_response_headers(cache_control, content_disposition, + content_encoding, content_language, + content_type) + sas.add_resource_signature(self.account_name, self.account_key, 'blob', container_name) + + return sas.get_token() diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/__init__.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/__init__.py new file mode 100644 index 00000000000..1307fe624b9 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/__init__.py @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from ._constants import ( + __author__, + __version__, + DEFAULT_X_MS_VERSION, +) +from .cloudstorageaccount import CloudStorageAccount +from .models import ( + RetentionPolicy, + Logging, + Metrics, + CorsRule, + DeleteRetentionPolicy, + ServiceProperties, + AccessPolicy, + ResourceTypes, + Services, + AccountPermissions, + Protocol, + ServiceStats, + GeoReplication, + LocationMode, + RetryContext, +) +from .retry import ( + ExponentialRetry, + LinearRetry, + no_retry, +) +from .sharedaccesssignature import ( + SharedAccessSignature, +) +from .tokencredential import TokenCredential diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_auth.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_auth.py new file mode 100644 index 00000000000..6ae446fc82e --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_auth.py @@ -0,0 +1,125 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from ._common_conversion import ( + _sign_string, +) +from ._constants import ( + DEV_ACCOUNT_NAME, + DEV_ACCOUNT_SECONDARY_NAME +) + +import logging +logger = logging.getLogger(__name__) + + +class _StorageSharedKeyAuthentication(object): + def __init__(self, account_name, account_key, is_emulated=False): + self.account_name = account_name + self.account_key = account_key + self.is_emulated = is_emulated + + def _get_headers(self, request, headers_to_sign): + headers = dict((name.lower(), value) for name, value in request.headers.items() if value) + if 'content-length' in headers and headers['content-length'] == '0': + del headers['content-length'] + return '\n'.join(headers.get(x, '') for x in headers_to_sign) + '\n' + + def _get_verb(self, request): + return request.method + '\n' + + def _get_canonicalized_resource(self, request): + uri_path = request.path.split('?')[0] + + # for emulator, use the DEV_ACCOUNT_NAME instead of DEV_ACCOUNT_SECONDARY_NAME + # as this is how the emulator works + if self.is_emulated and uri_path.find(DEV_ACCOUNT_SECONDARY_NAME) == 1: + # only replace the first instance + uri_path = uri_path.replace(DEV_ACCOUNT_SECONDARY_NAME, DEV_ACCOUNT_NAME, 1) + + return '/' + self.account_name + uri_path + + def _get_canonicalized_headers(self, request): + string_to_sign = '' + x_ms_headers = [] + for name, value in request.headers.items(): + if name.startswith('x-ms-'): + x_ms_headers.append((name.lower(), value)) + x_ms_headers.sort() + for name, value in x_ms_headers: + if value is not None: + string_to_sign += ''.join([name, ':', value, '\n']) + return string_to_sign + + def _add_authorization_header(self, request, string_to_sign): + signature = _sign_string(self.account_key, string_to_sign) + auth_string = 'SharedKey ' + self.account_name + ':' + signature + request.headers['Authorization'] = auth_string + + +class _StorageSharedKeyAuthentication(_StorageSharedKeyAuthentication): + def sign_request(self, request): + string_to_sign = \ + self._get_verb(request) + \ + self._get_headers( + request, + [ + 'content-encoding', 'content-language', 'content-length', + 'content-md5', 'content-type', 'date', 'if-modified-since', + 'if-match', 'if-none-match', 'if-unmodified-since', 'byte_range' + ] + ) + \ + self._get_canonicalized_headers(request) + \ + self._get_canonicalized_resource(request) + \ + self._get_canonicalized_resource_query(request) + + self._add_authorization_header(request, string_to_sign) + logger.debug("String_to_sign=%s", string_to_sign) + + def _get_canonicalized_resource_query(self, request): + sorted_queries = [(name, value) for name, value in request.query.items()] + sorted_queries.sort() + + string_to_sign = '' + for name, value in sorted_queries: + if value: + string_to_sign += '\n' + name.lower() + ':' + value + + return string_to_sign + + +class _StorageNoAuthentication(object): + def sign_request(self, request): + pass + + +class _StorageSASAuthentication(object): + def __init__(self, sas_token): + # ignore ?-prefix (added by tools such as Azure Portal) on sas tokens + # doing so avoids double question marks when signing + if sas_token[0] == '?': + self.sas_token = sas_token[1:] + else: + self.sas_token = sas_token + + def sign_request(self, request): + # if 'sig=' is present, then the request has already been signed + # as is the case when performing retries + if 'sig=' in request.path: + return + if '?' in request.path: + request.path += '&' + else: + request.path += '?' + + request.path += self.sas_token + + +class _StorageTokenAuthentication(object): + def __init__(self, token): + self.token_credential = token + + def sign_request(self, request): + request.headers['Authorization'] = str.format("Bearer {}", self.token_credential.get_token()) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_common_conversion.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_common_conversion.py new file mode 100644 index 00000000000..8b50afbe1af --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_common_conversion.py @@ -0,0 +1,126 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +import base64 +import hashlib +import hmac +import sys +from io import (SEEK_SET) + +from dateutil.tz import tzutc + +from ._error import ( + _ERROR_VALUE_SHOULD_BE_BYTES_OR_STREAM, + _ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM, +) +from .models import ( + _unicode_type, +) + +if sys.version_info < (3,): + def _str(value): + if isinstance(value, unicode): + return value.encode('utf-8') + + return str(value) +else: + _str = str + + +def _to_str(value): + return _str(value) if value is not None else None + + +def _int_to_str(value): + return str(int(value)) if value is not None else None + + +def _bool_to_str(value): + if value is None: + return None + + if isinstance(value, bool): + if value: + return 'true' + else: + return 'false' + + return str(value) + + +def _to_utc_datetime(value): + return value.strftime('%Y-%m-%dT%H:%M:%SZ') + + +def _datetime_to_utc_string(value): + # Azure expects the date value passed in to be UTC. + # Azure will always return values as UTC. + # If a date is passed in without timezone info, it is assumed to be UTC. + if value is None: + return None + + if value.tzinfo: + value = value.astimezone(tzutc()) + + return value.strftime('%a, %d %b %Y %H:%M:%S GMT') + + +def _encode_base64(data): + if isinstance(data, _unicode_type): + data = data.encode('utf-8') + encoded = base64.b64encode(data) + return encoded.decode('utf-8') + + +def _decode_base64_to_bytes(data): + if isinstance(data, _unicode_type): + data = data.encode('utf-8') + return base64.b64decode(data) + + +def _decode_base64_to_text(data): + decoded_bytes = _decode_base64_to_bytes(data) + return decoded_bytes.decode('utf-8') + + +def _sign_string(key, string_to_sign, key_is_base64=True): + if key_is_base64: + key = _decode_base64_to_bytes(key) + else: + if isinstance(key, _unicode_type): + key = key.encode('utf-8') + if isinstance(string_to_sign, _unicode_type): + string_to_sign = string_to_sign.encode('utf-8') + signed_hmac_sha256 = hmac.HMAC(key, string_to_sign, hashlib.sha256) + digest = signed_hmac_sha256.digest() + encoded_digest = _encode_base64(digest) + return encoded_digest + + +def _get_content_md5(data): + md5 = hashlib.md5() + if isinstance(data, bytes): + md5.update(data) + elif hasattr(data, 'read'): + pos = 0 + try: + pos = data.tell() + except: + pass + for chunk in iter(lambda: data.read(4096), b""): + md5.update(chunk) + try: + data.seek(pos, SEEK_SET) + except (AttributeError, IOError): + raise ValueError(_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM.format('data')) + else: + raise ValueError(_ERROR_VALUE_SHOULD_BE_BYTES_OR_STREAM.format('data')) + + return base64.b64encode(md5.digest()).decode('utf-8') + + +def _lower(text): + return text.lower() diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_connection.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_connection.py new file mode 100644 index 00000000000..1388fddeb62 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_connection.py @@ -0,0 +1,160 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys + +if sys.version_info >= (3,): + from urllib.parse import urlparse +else: + from urlparse import urlparse + +from ._constants import ( + SERVICE_HOST_BASE, + DEFAULT_PROTOCOL, + DEV_ACCOUNT_NAME, + DEV_ACCOUNT_SECONDARY_NAME, + DEV_ACCOUNT_KEY, + DEV_BLOB_HOST, + DEV_QUEUE_HOST, +) +from ._error import ( + _ERROR_STORAGE_MISSING_INFO, +) + +_EMULATOR_ENDPOINTS = { + 'blob': DEV_BLOB_HOST, + 'queue': DEV_QUEUE_HOST, + 'file': '', +} + +_CONNECTION_ENDPOINTS = { + 'blob': 'BlobEndpoint', + 'queue': 'QueueEndpoint', + 'file': 'FileEndpoint', +} + +_CONNECTION_ENDPOINTS_SECONDARY = { + 'blob': 'BlobSecondaryEndpoint', + 'queue': 'QueueSecondaryEndpoint', + 'file': 'FileSecondaryEndpoint', +} + + +class _ServiceParameters(object): + def __init__(self, service, account_name=None, account_key=None, sas_token=None, token_credential=None, + is_emulated=False, protocol=DEFAULT_PROTOCOL, endpoint_suffix=SERVICE_HOST_BASE, + custom_domain=None, custom_domain_secondary=None): + + self.account_name = account_name + self.account_key = account_key + self.sas_token = sas_token + self.token_credential = token_credential + self.protocol = protocol or DEFAULT_PROTOCOL + self.is_emulated = is_emulated + + if is_emulated: + self.account_name = DEV_ACCOUNT_NAME + self.protocol = 'http' + + # Only set the account key if a sas_token is not present to allow sas to be used with the emulator + self.account_key = DEV_ACCOUNT_KEY if not self.sas_token else None + + self.primary_endpoint = '{}/{}'.format(_EMULATOR_ENDPOINTS[service], DEV_ACCOUNT_NAME) + self.secondary_endpoint = '{}/{}'.format(_EMULATOR_ENDPOINTS[service], DEV_ACCOUNT_SECONDARY_NAME) + else: + # Strip whitespace from the key + if self.account_key: + self.account_key = self.account_key.strip() + + endpoint_suffix = endpoint_suffix or SERVICE_HOST_BASE + + # Setup the primary endpoint + if custom_domain: + parsed_url = urlparse(custom_domain) + + # Trim any trailing slashes from the path + path = parsed_url.path.rstrip('/') + + self.primary_endpoint = parsed_url.netloc + path + self.protocol = self.protocol if parsed_url.scheme is '' else parsed_url.scheme + else: + if not self.account_name: + raise ValueError(_ERROR_STORAGE_MISSING_INFO) + self.primary_endpoint = '{}.{}.{}'.format(self.account_name, service, endpoint_suffix) + + # Setup the secondary endpoint + if custom_domain_secondary: + if not custom_domain: + raise ValueError(_ERROR_STORAGE_MISSING_INFO) + + parsed_url = urlparse(custom_domain_secondary) + + # Trim any trailing slashes from the path + path = parsed_url.path.rstrip('/') + + self.secondary_endpoint = parsed_url.netloc + path + else: + if self.account_name: + self.secondary_endpoint = '{}-secondary.{}.{}'.format(self.account_name, service, endpoint_suffix) + else: + self.secondary_endpoint = None + + @staticmethod + def get_service_parameters(service, account_name=None, account_key=None, sas_token=None, token_credential= None, + is_emulated=None, protocol=None, endpoint_suffix=None, custom_domain=None, + request_session=None, connection_string=None, socket_timeout=None): + if connection_string: + params = _ServiceParameters._from_connection_string(connection_string, service) + elif is_emulated: + params = _ServiceParameters(service, is_emulated=True) + elif account_name: + if protocol.lower() != 'https' and token_credential is not None: + raise ValueError("Token credential is only supported with HTTPS.") + params = _ServiceParameters(service, + account_name=account_name, + account_key=account_key, + sas_token=sas_token, + token_credential=token_credential, + is_emulated=is_emulated, + protocol=protocol, + endpoint_suffix=endpoint_suffix, + custom_domain=custom_domain) + else: + raise ValueError(_ERROR_STORAGE_MISSING_INFO) + + params.request_session = request_session + params.socket_timeout = socket_timeout + return params + + @staticmethod + def _from_connection_string(connection_string, service): + # Split into key=value pairs removing empties, then split the pairs into a dict + config = dict(s.split('=', 1) for s in connection_string.split(';') if s) + + # Authentication + account_name = config.get('AccountName') + account_key = config.get('AccountKey') + sas_token = config.get('SharedAccessSignature') + + # Emulator + is_emulated = config.get('UseDevelopmentStorage') + + # Basic URL Configuration + protocol = config.get('DefaultEndpointsProtocol') + endpoint_suffix = config.get('EndpointSuffix') + + # Custom URLs + endpoint = config.get(_CONNECTION_ENDPOINTS[service]) + endpoint_secondary = config.get(_CONNECTION_ENDPOINTS_SECONDARY[service]) + + return _ServiceParameters(service, + account_name=account_name, + account_key=account_key, + sas_token=sas_token, + is_emulated=is_emulated, + protocol=protocol, + endpoint_suffix=endpoint_suffix, + custom_domain=endpoint, + custom_domain_secondary=endpoint_secondary) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_constants.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_constants.py new file mode 100644 index 00000000000..5994579e212 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_constants.py @@ -0,0 +1,47 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import platform +import sys + +__author__ = 'Microsoft Corp. ' +__version__ = '1.2.0rc0' + +# UserAgent string sample: 'Azure-Storage/0.37.0-0.38.0 (Python CPython 3.4.2; Windows 8)' +# First version(0.37.0) is the common package, and the second version(0.38.0) is the service package +USER_AGENT_STRING_PREFIX = 'Azure-Storage/{}-'.format(__version__) +USER_AGENT_STRING_SUFFIX = '(Python {} {}; {} {})'.format(platform.python_implementation(), + platform.python_version(), platform.system(), + platform.release()) + +# default values for common package, in case it is used directly +DEFAULT_X_MS_VERSION = '2017-07-29' +DEFAULT_USER_AGENT_STRING = '{}None {}'.format(USER_AGENT_STRING_PREFIX, USER_AGENT_STRING_SUFFIX) + +# Live ServiceClient URLs +SERVICE_HOST_BASE = 'core.windows.net' +DEFAULT_PROTOCOL = 'https' + +# Development ServiceClient URLs +DEV_BLOB_HOST = '127.0.0.1:10000' +DEV_QUEUE_HOST = '127.0.0.1:10001' + +# Default credentials for Development Storage Service +DEV_ACCOUNT_NAME = 'devstoreaccount1' +DEV_ACCOUNT_SECONDARY_NAME = 'devstoreaccount1-secondary' +DEV_ACCOUNT_KEY = 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==' + +# Socket timeout in seconds +DEFAULT_SOCKET_TIMEOUT = 20 + +# for python 3.5+, there was a change to the definition of the socket timeout (as far as socket.sendall is concerned) +# The socket timeout is now the maximum total duration to send all data. +if sys.version_info >= (3, 5): + # the timeout to connect is 20 seconds, and the read timeout is 2000 seconds + # the 2000 seconds was calculated with: 100MB (max block size)/ 50KB/s (an arbitrarily chosen minimum upload speed) + DEFAULT_SOCKET_TIMEOUT = (20, 2000) + +# Encryption constants +_ENCRYPTION_PROTOCOL_V1 = '1.0' diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_deserialization.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_deserialization.py new file mode 100644 index 00000000000..986d2647617 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_deserialization.py @@ -0,0 +1,361 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from dateutil import parser + +from ._common_conversion import _to_str + +try: + from xml.etree import cElementTree as ETree +except ImportError: + from xml.etree import ElementTree as ETree + +from .models import ( + ServiceProperties, + Logging, + Metrics, + CorsRule, + AccessPolicy, + _dict, + GeoReplication, + ServiceStats, + DeleteRetentionPolicy, +) + + +def _to_int(value): + return value if value is None else int(value) + + +def _bool(value): + return value.lower() == 'true' + + +def _to_upper_str(value): + return _to_str(value).upper() if value is not None else None + + +def _get_download_size(start_range, end_range, resource_size): + if start_range is not None: + end_range = end_range if end_range else (resource_size if resource_size else None) + if end_range is not None: + return end_range - start_range + else: + return None + else: + return resource_size + + +GET_PROPERTIES_ATTRIBUTE_MAP = { + 'last-modified': (None, 'last_modified', parser.parse), + 'etag': (None, 'etag', _to_str), + 'x-ms-blob-type': (None, 'blob_type', _to_str), + 'content-length': (None, 'content_length', _to_int), + 'content-range': (None, 'content_range', _to_str), + 'x-ms-blob-sequence-number': (None, 'page_blob_sequence_number', _to_int), + 'x-ms-blob-committed-block-count': (None, 'append_blob_committed_block_count', _to_int), + 'x-ms-blob-public-access': (None, 'public_access', _to_str), + 'x-ms-access-tier': (None, 'blob_tier', _to_str), + 'x-ms-access-tier-change-time': (None, 'blob_tier_change_time', parser.parse), + 'x-ms-access-tier-inferred': (None, 'blob_tier_inferred', _bool), + 'x-ms-archive-status': (None, 'rehydration_status', _to_str), + 'x-ms-share-quota': (None, 'quota', _to_int), + 'x-ms-server-encrypted': (None, 'server_encrypted', _bool), + 'content-type': ('content_settings', 'content_type', _to_str), + 'cache-control': ('content_settings', 'cache_control', _to_str), + 'content-encoding': ('content_settings', 'content_encoding', _to_str), + 'content-disposition': ('content_settings', 'content_disposition', _to_str), + 'content-language': ('content_settings', 'content_language', _to_str), + 'content-md5': ('content_settings', 'content_md5', _to_str), + 'x-ms-lease-status': ('lease', 'status', _to_str), + 'x-ms-lease-state': ('lease', 'state', _to_str), + 'x-ms-lease-duration': ('lease', 'duration', _to_str), + 'x-ms-copy-id': ('copy', 'id', _to_str), + 'x-ms-copy-source': ('copy', 'source', _to_str), + 'x-ms-copy-status': ('copy', 'status', _to_str), + 'x-ms-copy-progress': ('copy', 'progress', _to_str), + 'x-ms-copy-completion-time': ('copy', 'completion_time', parser.parse), + 'x-ms-copy-destination-snapshot': ('copy', 'destination_snapshot_time', _to_str), + 'x-ms-copy-status-description': ('copy', 'status_description', _to_str), +} + + +def _parse_metadata(response): + ''' + Extracts out resource metadata information. + ''' + + if response is None or response.headers is None: + return None + + metadata = _dict() + for key, value in response.headers.items(): + if key.lower().startswith('x-ms-meta-'): + metadata[key[10:]] = _to_str(value) + + return metadata + + +def _parse_properties(response, result_class): + ''' + Extracts out resource properties and metadata information. + Ignores the standard http headers. + ''' + + if response is None or response.headers is None: + return None + + props = result_class() + for key, value in response.headers.items(): + info = GET_PROPERTIES_ATTRIBUTE_MAP.get(key) + if info: + if info[0] is None: + setattr(props, info[1], info[2](value)) + else: + attr = getattr(props, info[0]) + setattr(attr, info[1], info[2](value)) + + if hasattr(props, 'blob_type') and props.blob_type == 'PageBlob' and hasattr(props, 'blob_tier') and props.blob_tier is not None: + props.blob_tier = _to_upper_str(props.blob_tier) + return props + + +def _parse_length_from_content_range(content_range): + ''' + Parses the blob length from the content range header: bytes 1-3/65537 + ''' + if content_range is None: + return None + + # First, split in space and take the second half: '1-3/65537' + # Next, split on slash and take the second half: '65537' + # Finally, convert to an int: 65537 + return int(content_range.split(' ', 1)[1].split('/', 1)[1]) + + +def _convert_xml_to_signed_identifiers(response): + ''' + + + + unique-value + + start-time + expiry-time + abbreviated-permission-list + + + + ''' + if response is None or response.body is None: + return None + + list_element = ETree.fromstring(response.body) + signed_identifiers = _dict() + + for signed_identifier_element in list_element.findall('SignedIdentifier'): + # Id element + id = signed_identifier_element.find('Id').text + + # Access policy element + access_policy = AccessPolicy() + access_policy_element = signed_identifier_element.find('AccessPolicy') + if access_policy_element is not None: + start_element = access_policy_element.find('Start') + if start_element is not None: + access_policy.start = parser.parse(start_element.text) + + expiry_element = access_policy_element.find('Expiry') + if expiry_element is not None: + access_policy.expiry = parser.parse(expiry_element.text) + + access_policy.permission = access_policy_element.findtext('Permission') + + signed_identifiers[id] = access_policy + + return signed_identifiers + + +def _convert_xml_to_service_stats(response): + ''' + + + + live|bootstrap|unavailable + sync-time| + + + ''' + if response is None or response.body is None: + return None + + service_stats_element = ETree.fromstring(response.body) + + geo_replication_element = service_stats_element.find('GeoReplication') + + geo_replication = GeoReplication() + geo_replication.status = geo_replication_element.find('Status').text + last_sync_time = geo_replication_element.find('LastSyncTime').text + geo_replication.last_sync_time = parser.parse(last_sync_time) if last_sync_time else None + + service_stats = ServiceStats() + service_stats.geo_replication = geo_replication + return service_stats + + +def _convert_xml_to_service_properties(response): + ''' + + + + version-number + true|false + true|false + true|false + + true|false + number-of-days + + + + version-number + true|false + true|false + + true|false + number-of-days + + + + version-number + true|false + true|false + + true|false + number-of-days + + + + + comma-separated-list-of-allowed-origins + comma-separated-list-of-HTTP-verb + max-caching-age-in-seconds + comma-seperated-list-of-response-headers + comma-seperated-list-of-request-headers + + + + true|false + number-of-days + + + ''' + if response is None or response.body is None: + return None + + service_properties_element = ETree.fromstring(response.body) + service_properties = ServiceProperties() + + # Logging + logging = service_properties_element.find('Logging') + if logging is not None: + service_properties.logging = Logging() + service_properties.logging.version = logging.find('Version').text + service_properties.logging.delete = _bool(logging.find('Delete').text) + service_properties.logging.read = _bool(logging.find('Read').text) + service_properties.logging.write = _bool(logging.find('Write').text) + + _convert_xml_to_retention_policy(logging.find('RetentionPolicy'), + service_properties.logging.retention_policy) + # HourMetrics + hour_metrics_element = service_properties_element.find('HourMetrics') + if hour_metrics_element is not None: + service_properties.hour_metrics = Metrics() + _convert_xml_to_metrics(hour_metrics_element, service_properties.hour_metrics) + + # MinuteMetrics + minute_metrics_element = service_properties_element.find('MinuteMetrics') + if minute_metrics_element is not None: + service_properties.minute_metrics = Metrics() + _convert_xml_to_metrics(minute_metrics_element, service_properties.minute_metrics) + + # CORS + cors = service_properties_element.find('Cors') + if cors is not None: + service_properties.cors = list() + for rule in cors.findall('CorsRule'): + allowed_origins = rule.find('AllowedOrigins').text.split(',') + + allowed_methods = rule.find('AllowedMethods').text.split(',') + + max_age_in_seconds = int(rule.find('MaxAgeInSeconds').text) + + cors_rule = CorsRule(allowed_origins, allowed_methods, max_age_in_seconds) + + exposed_headers = rule.find('ExposedHeaders').text + if exposed_headers is not None: + cors_rule.exposed_headers = exposed_headers.split(',') + + allowed_headers = rule.find('AllowedHeaders').text + if allowed_headers is not None: + cors_rule.allowed_headers = allowed_headers.split(',') + + service_properties.cors.append(cors_rule) + + # Target version + target_version = service_properties_element.find('DefaultServiceVersion') + if target_version is not None: + service_properties.target_version = target_version.text + + # DeleteRetentionPolicy + delete_retention_policy_element = service_properties_element.find('DeleteRetentionPolicy') + if delete_retention_policy_element is not None: + service_properties.delete_retention_policy = DeleteRetentionPolicy() + policy_enabled = _bool(delete_retention_policy_element.find('Enabled').text) + service_properties.delete_retention_policy.enabled = policy_enabled + + if policy_enabled: + service_properties.delete_retention_policy.days = int(delete_retention_policy_element.find('Days').text) + + return service_properties + + +def _convert_xml_to_metrics(xml, metrics): + ''' + version-number + true|false + true|false + + true|false + number-of-days + + ''' + # Version + metrics.version = xml.find('Version').text + + # Enabled + metrics.enabled = _bool(xml.find('Enabled').text) + + # IncludeAPIs + include_apis_element = xml.find('IncludeAPIs') + if include_apis_element is not None: + metrics.include_apis = _bool(include_apis_element.text) + + # RetentionPolicy + _convert_xml_to_retention_policy(xml.find('RetentionPolicy'), metrics.retention_policy) + + +def _convert_xml_to_retention_policy(xml, retention_policy): + ''' + true|false + number-of-days + ''' + # Enabled + retention_policy.enabled = _bool(xml.find('Enabled').text) + + # Days + days_element = xml.find('Days') + if days_element is not None: + retention_policy.days = int(days_element.text) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_encryption.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_encryption.py new file mode 100644 index 00000000000..cd7d92e66e0 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_encryption.py @@ -0,0 +1,233 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from collections import OrderedDict + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.ciphers import Cipher +from cryptography.hazmat.primitives.ciphers.algorithms import AES +from cryptography.hazmat.primitives.ciphers.modes import CBC + +from ._common_conversion import ( + _encode_base64, + _decode_base64_to_bytes, +) +from ._constants import ( + _ENCRYPTION_PROTOCOL_V1, + __version__, +) +from ._error import ( + _ERROR_UNSUPPORTED_ENCRYPTION_VERSION, + _validate_not_none, + _validate_encryption_protocol_version, + _validate_key_encryption_key_unwrap, + _validate_kek_id, +) + + +class _EncryptionAlgorithm(object): + ''' + Specifies which client encryption algorithm is used. + ''' + AES_CBC_256 = 'AES_CBC_256' + + +class _WrappedContentKey: + ''' + Represents the envelope key details stored on the service. + ''' + + def __init__(self, algorithm, encrypted_key, key_id): + ''' + :param str algorithm: + The algorithm used for wrapping. + :param bytes encrypted_key: + The encrypted content-encryption-key. + :param str key_id: + The key-encryption-key identifier string. + ''' + + _validate_not_none('algorithm', algorithm) + _validate_not_none('encrypted_key', encrypted_key) + _validate_not_none('key_id', key_id) + + self.algorithm = algorithm + self.encrypted_key = encrypted_key + self.key_id = key_id + + +class _EncryptionAgent: + ''' + Represents the encryption agent stored on the service. + It consists of the encryption protocol version and encryption algorithm used. + ''' + + def __init__(self, encryption_algorithm, protocol): + ''' + :param _EncryptionAlgorithm encryption_algorithm: + The algorithm used for encrypting the message contents. + :param str protocol: + The protocol version used for encryption. + ''' + + _validate_not_none('encryption_algorithm', encryption_algorithm) + _validate_not_none('protocol', protocol) + + self.encryption_algorithm = str(encryption_algorithm) + self.protocol = protocol + + +class _EncryptionData: + ''' + Represents the encryption data that is stored on the service. + ''' + + def __init__(self, content_encryption_IV, encryption_agent, wrapped_content_key, + key_wrapping_metadata): + ''' + :param bytes content_encryption_IV: + The content encryption initialization vector. + :param _EncryptionAgent encryption_agent: + The encryption agent. + :param _WrappedContentKey wrapped_content_key: + An object that stores the wrapping algorithm, the key identifier, + and the encrypted key bytes. + :param dict key_wrapping_metadata: + A dict containing metadata related to the key wrapping. + ''' + + _validate_not_none('content_encryption_IV', content_encryption_IV) + _validate_not_none('encryption_agent', encryption_agent) + _validate_not_none('wrapped_content_key', wrapped_content_key) + + self.content_encryption_IV = content_encryption_IV + self.encryption_agent = encryption_agent + self.wrapped_content_key = wrapped_content_key + self.key_wrapping_metadata = key_wrapping_metadata + + +def _generate_encryption_data_dict(kek, cek, iv): + ''' + Generates and returns the encryption metadata as a dict. + + :param object kek: The key encryption key. See calling functions for more information. + :param bytes cek: The content encryption key. + :param bytes iv: The initialization vector. + :return: A dict containing all the encryption metadata. + :rtype: dict + ''' + # Encrypt the cek. + wrapped_cek = kek.wrap_key(cek) + + # Build the encryption_data dict. + # Use OrderedDict to comply with Java's ordering requirement. + wrapped_content_key = OrderedDict() + wrapped_content_key['KeyId'] = kek.get_kid() + wrapped_content_key['EncryptedKey'] = _encode_base64(wrapped_cek) + wrapped_content_key['Algorithm'] = kek.get_key_wrap_algorithm() + + encryption_agent = OrderedDict() + encryption_agent['Protocol'] = _ENCRYPTION_PROTOCOL_V1 + encryption_agent['EncryptionAlgorithm'] = _EncryptionAlgorithm.AES_CBC_256 + + encryption_data_dict = OrderedDict() + encryption_data_dict['WrappedContentKey'] = wrapped_content_key + encryption_data_dict['EncryptionAgent'] = encryption_agent + encryption_data_dict['ContentEncryptionIV'] = _encode_base64(iv) + encryption_data_dict['KeyWrappingMetadata'] = {'EncryptionLibrary': 'Python ' + __version__} + + return encryption_data_dict + + +def _dict_to_encryption_data(encryption_data_dict): + ''' + Converts the specified dictionary to an EncryptionData object for + eventual use in decryption. + + :param dict encryption_data_dict: + The dictionary containing the encryption data. + :return: an _EncryptionData object built from the dictionary. + :rtype: _EncryptionData + ''' + try: + if encryption_data_dict['EncryptionAgent']['Protocol'] != _ENCRYPTION_PROTOCOL_V1: + raise ValueError(_ERROR_UNSUPPORTED_ENCRYPTION_VERSION) + except KeyError: + raise ValueError(_ERROR_UNSUPPORTED_ENCRYPTION_VERSION) + wrapped_content_key = encryption_data_dict['WrappedContentKey'] + wrapped_content_key = _WrappedContentKey(wrapped_content_key['Algorithm'], + _decode_base64_to_bytes(wrapped_content_key['EncryptedKey']), + wrapped_content_key['KeyId']) + + encryption_agent = encryption_data_dict['EncryptionAgent'] + encryption_agent = _EncryptionAgent(encryption_agent['EncryptionAlgorithm'], + encryption_agent['Protocol']) + + if 'KeyWrappingMetadata' in encryption_data_dict: + key_wrapping_metadata = encryption_data_dict['KeyWrappingMetadata'] + else: + key_wrapping_metadata = None + + encryption_data = _EncryptionData(_decode_base64_to_bytes(encryption_data_dict['ContentEncryptionIV']), + encryption_agent, + wrapped_content_key, + key_wrapping_metadata) + + return encryption_data + + +def _generate_AES_CBC_cipher(cek, iv): + ''' + Generates and returns an encryption cipher for AES CBC using the given cek and iv. + + :param bytes[] cek: The content encryption key for the cipher. + :param bytes[] iv: The initialization vector for the cipher. + :return: A cipher for encrypting in AES256 CBC. + :rtype: ~cryptography.hazmat.primitives.ciphers.Cipher + ''' + + backend = default_backend() + algorithm = AES(cek) + mode = CBC(iv) + return Cipher(algorithm, mode, backend) + + +def _validate_and_unwrap_cek(encryption_data, key_encryption_key=None, key_resolver=None): + ''' + Extracts and returns the content_encryption_key stored in the encryption_data object + and performs necessary validation on all parameters. + :param _EncryptionData encryption_data: + The encryption metadata of the retrieved value. + :param obj key_encryption_key: + The key_encryption_key used to unwrap the cek. Please refer to high-level service object + instance variables for more details. + :param func key_resolver: + A function used that, given a key_id, will return a key_encryption_key. Please refer + to high-level service object instance variables for more details. + :return: the content_encryption_key stored in the encryption_data object. + :rtype: bytes[] + ''' + + _validate_not_none('content_encryption_IV', encryption_data.content_encryption_IV) + _validate_not_none('encrypted_key', encryption_data.wrapped_content_key.encrypted_key) + + _validate_encryption_protocol_version(encryption_data.encryption_agent.protocol) + + content_encryption_key = None + + # If the resolver exists, give priority to the key it finds. + if key_resolver is not None: + key_encryption_key = key_resolver(encryption_data.wrapped_content_key.key_id) + + _validate_not_none('key_encryption_key', key_encryption_key) + _validate_key_encryption_key_unwrap(key_encryption_key) + _validate_kek_id(encryption_data.wrapped_content_key.key_id, key_encryption_key.get_kid()) + + # Will throw an exception if the specified algorithm is not supported. + content_encryption_key = key_encryption_key.unwrap_key(encryption_data.wrapped_content_key.encrypted_key, + encryption_data.wrapped_content_key.algorithm) + _validate_not_none('content_encryption_key', content_encryption_key) + + return content_encryption_key diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_error.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_error.py new file mode 100644 index 00000000000..a8f67864db4 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_error.py @@ -0,0 +1,179 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from sys import version_info + +if version_info < (3,): + def _str(value): + if isinstance(value, unicode): + return value.encode('utf-8') + + return str(value) +else: + _str = str + + +def _to_str(value): + return _str(value) if value is not None else None + + +from azure.common import ( + AzureHttpError, + AzureConflictHttpError, + AzureMissingResourceHttpError, + AzureException, +) +from ._constants import ( + _ENCRYPTION_PROTOCOL_V1, +) + +_ERROR_CONFLICT = 'Conflict ({0})' +_ERROR_NOT_FOUND = 'Not found ({0})' +_ERROR_UNKNOWN = 'Unknown error ({0})' +_ERROR_STORAGE_MISSING_INFO = \ + 'You need to provide an account name and either an account_key or sas_token when creating a storage service.' +_ERROR_EMULATOR_DOES_NOT_SUPPORT_FILES = \ + 'The emulator does not support the file service.' +_ERROR_ACCESS_POLICY = \ + 'share_access_policy must be either SignedIdentifier or AccessPolicy ' + \ + 'instance' +_ERROR_PARALLEL_NOT_SEEKABLE = 'Parallel operations require a seekable stream.' +_ERROR_VALUE_SHOULD_BE_BYTES = '{0} should be of type bytes.' +_ERROR_VALUE_SHOULD_BE_BYTES_OR_STREAM = '{0} should be of type bytes or a readable file-like/io.IOBase stream object.' +_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = '{0} should be a seekable file-like/io.IOBase type stream object.' +_ERROR_VALUE_SHOULD_BE_STREAM = '{0} should be a file-like/io.IOBase type stream object with a read method.' +_ERROR_VALUE_NONE = '{0} should not be None.' +_ERROR_VALUE_NONE_OR_EMPTY = '{0} should not be None or empty.' +_ERROR_VALUE_NEGATIVE = '{0} should not be negative.' +_ERROR_NO_SINGLE_THREAD_CHUNKING = \ + 'To use {0} chunk downloader more than 1 thread must be ' + \ + 'used since get_{0}_to_bytes should be called for single threaded ' + \ + '{0} downloads.' +_ERROR_START_END_NEEDED_FOR_MD5 = \ + 'Both end_range and start_range need to be specified ' + \ + 'for getting content MD5.' +_ERROR_RANGE_TOO_LARGE_FOR_MD5 = \ + 'Getting content MD5 for a range greater than 4MB ' + \ + 'is not supported.' +_ERROR_MD5_MISMATCH = \ + 'MD5 mismatch. Expected value is \'{0}\', computed value is \'{1}\'.' +_ERROR_TOO_MANY_ACCESS_POLICIES = \ + 'Too many access policies provided. The server does not support setting more than 5 access policies on a single resource.' +_ERROR_OBJECT_INVALID = \ + '{0} does not define a complete interface. Value of {1} is either missing or invalid.' +_ERROR_UNSUPPORTED_ENCRYPTION_VERSION = \ + 'Encryption version is not supported.' +_ERROR_DECRYPTION_FAILURE = \ + 'Decryption failed' +_ERROR_ENCRYPTION_REQUIRED = \ + 'Encryption required but no key was provided.' +_ERROR_DECRYPTION_REQUIRED = \ + 'Decryption required but neither key nor resolver was provided.' + \ + ' If you do not want to decypt, please do not set the require encryption flag.' +_ERROR_INVALID_KID = \ + 'Provided or resolved key-encryption-key does not match the id of key used to encrypt.' +_ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM = \ + 'Specified encryption algorithm is not supported.' +_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION = 'The require_encryption flag is set, but encryption is not supported' + \ + ' for this method.' +_ERROR_UNKNOWN_KEY_WRAP_ALGORITHM = 'Unknown key wrap algorithm.' +_ERROR_DATA_NOT_ENCRYPTED = 'Encryption required, but received data does not contain appropriate metatadata.' + \ + 'Data was either not encrypted or metadata has been lost.' + + +def _dont_fail_on_exist(error): + ''' don't throw exception if the resource exists. + This is called by create_* APIs with fail_on_exist=False''' + if isinstance(error, AzureConflictHttpError): + return False + else: + raise error + + +def _dont_fail_not_exist(error): + ''' don't throw exception if the resource doesn't exist. + This is called by create_* APIs with fail_on_exist=False''' + if isinstance(error, AzureMissingResourceHttpError): + return False + else: + raise error + + +def _http_error_handler(http_error): + ''' Simple error handler for azure.''' + message = str(http_error) + if 'x-ms-error-code' in http_error.respheader: + message += 'ErrorCode: ' + http_error.respheader['x-ms-error-code'] + if http_error.respbody is not None: + message += '\n' + http_error.respbody.decode('utf-8-sig') + raise AzureHttpError(message, http_error.status) + + +def _validate_type_bytes(param_name, param): + if not isinstance(param, bytes): + raise TypeError(_ERROR_VALUE_SHOULD_BE_BYTES.format(param_name)) + + +def _validate_type_bytes_or_stream(param_name, param): + if not (isinstance(param, bytes) or hasattr(param, 'read')): + raise TypeError(_ERROR_VALUE_SHOULD_BE_BYTES_OR_STREAM.format(param_name)) + + +def _validate_not_none(param_name, param): + if param is None: + raise ValueError(_ERROR_VALUE_NONE.format(param_name)) + + +def _validate_content_match(server_md5, computed_md5): + if server_md5 != computed_md5: + raise AzureException(_ERROR_MD5_MISMATCH.format(server_md5, computed_md5)) + + +def _validate_access_policies(identifiers): + if identifiers and len(identifiers) > 5: + raise AzureException(_ERROR_TOO_MANY_ACCESS_POLICIES) + + +def _validate_key_encryption_key_wrap(kek): + # Note that None is not callable and so will fail the second clause of each check. + if not hasattr(kek, 'wrap_key') or not callable(kek.wrap_key): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'wrap_key')) + if not hasattr(kek, 'get_kid') or not callable(kek.get_kid): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid')) + if not hasattr(kek, 'get_key_wrap_algorithm') or not callable(kek.get_key_wrap_algorithm): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_key_wrap_algorithm')) + + +def _validate_key_encryption_key_unwrap(kek): + if not hasattr(kek, 'get_kid') or not callable(kek.get_kid): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid')) + if not hasattr(kek, 'unwrap_key') or not callable(kek.unwrap_key): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'unwrap_key')) + + +def _validate_encryption_required(require_encryption, kek): + if require_encryption and (kek is None): + raise ValueError(_ERROR_ENCRYPTION_REQUIRED) + + +def _validate_decryption_required(require_encryption, kek, resolver): + if (require_encryption and (kek is None) and + (resolver is None)): + raise ValueError(_ERROR_DECRYPTION_REQUIRED) + + +def _validate_encryption_protocol_version(encryption_protocol): + if not (_ENCRYPTION_PROTOCOL_V1 == encryption_protocol): + raise ValueError(_ERROR_UNSUPPORTED_ENCRYPTION_VERSION) + + +def _validate_kek_id(kid, resolved_id): + if not (kid == resolved_id): + raise ValueError(_ERROR_INVALID_KID) + + +def _validate_encryption_unsupported(require_encryption, key_encryption_key): + if require_encryption or (key_encryption_key is not None): + raise ValueError(_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_http/__init__.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_http/__init__.py new file mode 100644 index 00000000000..2990ec80abe --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_http/__init__.py @@ -0,0 +1,74 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + + +class HTTPError(Exception): + ''' + Represents an HTTP Exception when response status code >= 300. + + :ivar int status: + the status code of the response + :ivar str message: + the message + :ivar list headers: + the returned headers, as a list of (name, value) pairs + :ivar bytes body: + the body of the response + ''' + + def __init__(self, status, message, respheader, respbody): + self.status = status + self.respheader = respheader + self.respbody = respbody + Exception.__init__(self, message) + + +class HTTPResponse(object): + ''' + Represents a response from an HTTP request. + + :ivar int status: + the status code of the response + :ivar str message: + the message + :ivar dict headers: + the returned headers + :ivar bytes body: + the body of the response + ''' + + def __init__(self, status, message, headers, body): + self.status = status + self.message = message + self.headers = headers + self.body = body + + +class HTTPRequest(object): + ''' + Represents an HTTP Request. + + :ivar str host: + the host name to connect to + :ivar str method: + the method to use to connect (string such as GET, POST, PUT, etc.) + :ivar str path: + the uri fragment + :ivar dict query: + query parameters + :ivar dict headers: + header values + :ivar bytes body: + the body of the request. + ''' + + def __init__(self): + self.host = '' + self.method = '' + self.path = '' + self.query = {} # list of (name, value) + self.headers = {} # list of (header name, header value) + self.body = '' diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_http/httpclient.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_http/httpclient.py new file mode 100644 index 00000000000..b5847660e29 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_http/httpclient.py @@ -0,0 +1,107 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +import logging +from . import HTTPResponse +from .._serialization import _get_data_bytes_or_stream_only +logger = logging.getLogger(__name__) + + +class _HTTPClient(object): + ''' + Takes the request and sends it to cloud service and returns the response. + ''' + + def __init__(self, protocol=None, session=None, timeout=None): + ''' + :param str protocol: + http or https. + :param requests.Session session: + session object created with requests library (or compatible). + :param int timeout: + timeout for the http request, in seconds. + ''' + self.protocol = protocol + self.session = session + self.timeout = timeout + + # By default, requests adds an Accept:*/* and Accept-Encoding to the session, + # which causes issues with some Azure REST APIs. Removing these here gives us + # the flexibility to add it back on a case by case basis. + if 'Accept' in self.session.headers: + del self.session.headers['Accept'] + + if 'Accept-Encoding' in self.session.headers: + del self.session.headers['Accept-Encoding'] + + self.proxies = None + + def set_proxy(self, host, port, user, password): + ''' + Sets the proxy server host and port for the HTTP CONNECT Tunnelling. + + Note that we set the proxies directly on the request later on rather than + using the session object as requests has a bug where session proxy is ignored + in favor of environment proxy. So, auth will not work unless it is passed + directly when making the request as this overrides both. + + :param str host: + Address of the proxy. Ex: '192.168.0.100' + :param int port: + Port of the proxy. Ex: 6000 + :param str user: + User for proxy authorization. + :param str password: + Password for proxy authorization. + ''' + if user and password: + proxy_string = '{}:{}@{}:{}'.format(user, password, host, port) + else: + proxy_string = '{}:{}'.format(host, port) + + self.proxies = {'http': 'http://{}'.format(proxy_string), + 'https': 'https://{}'.format(proxy_string)} + + def perform_request(self, request): + ''' + Sends an HTTPRequest to Azure Storage and returns an HTTPResponse. If + the response code indicates an error, raise an HTTPError. + + :param HTTPRequest request: + The request to serialize and send. + :return: An HTTPResponse containing the parsed HTTP response. + :rtype: :class:`~azure.storage.common._http.HTTPResponse` + ''' + # Verify the body is in bytes or either a file-like/stream object + if request.body: + request.body = _get_data_bytes_or_stream_only('request.body', request.body) + + # Construct the URI + uri = self.protocol.lower() + '://' + request.host + request.path + + # Send the request + response = self.session.request(request.method, + uri, + params=request.query, + headers=request.headers, + data=request.body or None, + timeout=self.timeout, + proxies=self.proxies) + + # Parse the response + status = int(response.status_code) + response_headers = {} + for key, name in response.headers.items(): + # Preserve the case of metadata + if key.lower().startswith('x-ms-meta-'): + response_headers[key] = name + else: + response_headers[key.lower()] = name + + wrap = HTTPResponse(status, response.reason, response_headers, response.content) + response.close() + + return wrap diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_serialization.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_serialization.py new file mode 100644 index 00000000000..fd34d5816e2 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/_serialization.py @@ -0,0 +1,352 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys +import uuid +from datetime import date +from io import (BytesIO, IOBase, SEEK_SET, SEEK_END, UnsupportedOperation) +from os import fstat +from time import time +from wsgiref.handlers import format_date_time + +from dateutil.tz import tzutc + +if sys.version_info >= (3,): + from urllib.parse import quote as url_quote +else: + from urllib2 import quote as url_quote + +try: + from xml.etree import cElementTree as ETree +except ImportError: + from xml.etree import ElementTree as ETree + +from ._error import ( + _ERROR_VALUE_SHOULD_BE_BYTES, + _ERROR_VALUE_SHOULD_BE_BYTES_OR_STREAM, + _ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM +) +from .models import ( + _unicode_type, +) +from ._common_conversion import ( + _str, +) + + +def _to_utc_datetime(value): + # Azure expects the date value passed in to be UTC. + # Azure will always return values as UTC. + # If a date is passed in without timezone info, it is assumed to be UTC. + if value.tzinfo: + value = value.astimezone(tzutc()) + return value.strftime('%Y-%m-%dT%H:%M:%SZ') + + +def _update_request(request, x_ms_version, user_agent_string): + # Verify body + if request.body: + request.body = _get_data_bytes_or_stream_only('request.body', request.body) + length = _len_plus(request.body) + + # only scenario where this case is plausible is if the stream object is not seekable. + if length is None: + raise ValueError(_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM) + + # if it is PUT, POST, MERGE, DELETE, need to add content-length to header. + if request.method in ['PUT', 'POST', 'MERGE', 'DELETE']: + request.headers['Content-Length'] = str(length) + + # append addtional headers based on the service + request.headers['x-ms-version'] = x_ms_version + request.headers['User-Agent'] = user_agent_string + request.headers['x-ms-client-request-id'] = str(uuid.uuid1()) + + # If the host has a path component (ex local storage), move it + path = request.host.split('/', 1) + if len(path) == 2: + request.host = path[0] + request.path = '/{}{}'.format(path[1], request.path) + + # Encode and optionally add local storage prefix to path + request.path = url_quote(request.path, '/()$=\',~') + + +def _add_metadata_headers(metadata, request): + if metadata: + if not request.headers: + request.headers = {} + for name, value in metadata.items(): + request.headers['x-ms-meta-' + name] = value + + +def _add_date_header(request): + current_time = format_date_time(time()) + request.headers['x-ms-date'] = current_time + + +def _get_data_bytes_only(param_name, param_value): + '''Validates the request body passed in and converts it to bytes + if our policy allows it.''' + if param_value is None: + return b'' + + if isinstance(param_value, bytes): + return param_value + + raise TypeError(_ERROR_VALUE_SHOULD_BE_BYTES.format(param_name)) + + +def _get_data_bytes_or_stream_only(param_name, param_value): + '''Validates the request body passed in is a stream/file-like or bytes + object.''' + if param_value is None: + return b'' + + if isinstance(param_value, bytes) or hasattr(param_value, 'read'): + return param_value + + raise TypeError(_ERROR_VALUE_SHOULD_BE_BYTES_OR_STREAM.format(param_name)) + + +def _get_request_body(request_body): + '''Converts an object into a request body. If it's None + we'll return an empty string, if it's one of our objects it'll + convert it to XML and return it. Otherwise we just use the object + directly''' + if request_body is None: + return b'' + + if isinstance(request_body, bytes) or isinstance(request_body, IOBase): + return request_body + + if isinstance(request_body, _unicode_type): + return request_body.encode('utf-8') + + request_body = str(request_body) + if isinstance(request_body, _unicode_type): + return request_body.encode('utf-8') + + return request_body + + +def _convert_signed_identifiers_to_xml(signed_identifiers): + if signed_identifiers is None: + return '' + + sis = ETree.Element('SignedIdentifiers') + for id, access_policy in signed_identifiers.items(): + # Root signed identifers element + si = ETree.SubElement(sis, 'SignedIdentifier') + + # Id element + ETree.SubElement(si, 'Id').text = id + + # Access policy element + policy = ETree.SubElement(si, 'AccessPolicy') + + if access_policy.start: + start = access_policy.start + if isinstance(access_policy.start, date): + start = _to_utc_datetime(start) + ETree.SubElement(policy, 'Start').text = start + + if access_policy.expiry: + expiry = access_policy.expiry + if isinstance(access_policy.expiry, date): + expiry = _to_utc_datetime(expiry) + ETree.SubElement(policy, 'Expiry').text = expiry + + if access_policy.permission: + ETree.SubElement(policy, 'Permission').text = _str(access_policy.permission) + + # Add xml declaration and serialize + try: + stream = BytesIO() + ETree.ElementTree(sis).write(stream, xml_declaration=True, encoding='utf-8', method='xml') + except: + raise + finally: + output = stream.getvalue() + stream.close() + + return output + + +def _convert_service_properties_to_xml(logging, hour_metrics, minute_metrics, + cors, target_version=None, delete_retention_policy=None): + ''' + + + + version-number + true|false + true|false + true|false + + true|false + number-of-days + + + + version-number + true|false + true|false + + true|false + number-of-days + + + + version-number + true|false + true|false + + true|false + number-of-days + + + + + comma-separated-list-of-allowed-origins + comma-separated-list-of-HTTP-verb + max-caching-age-in-seconds + comma-seperated-list-of-response-headers + comma-seperated-list-of-request-headers + + + + true|false + number-of-days + + + ''' + service_properties_element = ETree.Element('StorageServiceProperties') + + # Logging + if logging: + logging_element = ETree.SubElement(service_properties_element, 'Logging') + ETree.SubElement(logging_element, 'Version').text = logging.version + ETree.SubElement(logging_element, 'Delete').text = str(logging.delete) + ETree.SubElement(logging_element, 'Read').text = str(logging.read) + ETree.SubElement(logging_element, 'Write').text = str(logging.write) + + retention_element = ETree.SubElement(logging_element, 'RetentionPolicy') + _convert_retention_policy_to_xml(logging.retention_policy, retention_element) + + # HourMetrics + if hour_metrics: + hour_metrics_element = ETree.SubElement(service_properties_element, 'HourMetrics') + _convert_metrics_to_xml(hour_metrics, hour_metrics_element) + + # MinuteMetrics + if minute_metrics: + minute_metrics_element = ETree.SubElement(service_properties_element, 'MinuteMetrics') + _convert_metrics_to_xml(minute_metrics, minute_metrics_element) + + # CORS + # Make sure to still serialize empty list + if cors is not None: + cors_element = ETree.SubElement(service_properties_element, 'Cors') + for rule in cors: + cors_rule = ETree.SubElement(cors_element, 'CorsRule') + ETree.SubElement(cors_rule, 'AllowedOrigins').text = ",".join(rule.allowed_origins) + ETree.SubElement(cors_rule, 'AllowedMethods').text = ",".join(rule.allowed_methods) + ETree.SubElement(cors_rule, 'MaxAgeInSeconds').text = str(rule.max_age_in_seconds) + ETree.SubElement(cors_rule, 'ExposedHeaders').text = ",".join(rule.exposed_headers) + ETree.SubElement(cors_rule, 'AllowedHeaders').text = ",".join(rule.allowed_headers) + + # Target version + if target_version: + ETree.SubElement(service_properties_element, 'DefaultServiceVersion').text = target_version + + # DeleteRetentionPolicy + if delete_retention_policy: + policy_element = ETree.SubElement(service_properties_element, 'DeleteRetentionPolicy') + ETree.SubElement(policy_element, 'Enabled').text = str(delete_retention_policy.enabled) + + if delete_retention_policy.enabled: + ETree.SubElement(policy_element, 'Days').text = str(delete_retention_policy.days) + + # Add xml declaration and serialize + try: + stream = BytesIO() + ETree.ElementTree(service_properties_element).write(stream, xml_declaration=True, encoding='utf-8', + method='xml') + except: + raise + finally: + output = stream.getvalue() + stream.close() + + return output + + +def _convert_metrics_to_xml(metrics, root): + ''' + version-number + true|false + true|false + + true|false + number-of-days + + ''' + # Version + ETree.SubElement(root, 'Version').text = metrics.version + + # Enabled + ETree.SubElement(root, 'Enabled').text = str(metrics.enabled) + + # IncludeAPIs + if metrics.enabled and metrics.include_apis is not None: + ETree.SubElement(root, 'IncludeAPIs').text = str(metrics.include_apis) + + # RetentionPolicy + retention_element = ETree.SubElement(root, 'RetentionPolicy') + _convert_retention_policy_to_xml(metrics.retention_policy, retention_element) + + +def _convert_retention_policy_to_xml(retention_policy, root): + ''' + true|false + number-of-days + ''' + # Enabled + ETree.SubElement(root, 'Enabled').text = str(retention_policy.enabled) + + # Days + if retention_policy.enabled and retention_policy.days: + ETree.SubElement(root, 'Days').text = str(retention_policy.days) + + +def _len_plus(data): + length = None + # Check if object implements the __len__ method, covers most input cases such as bytearray. + try: + length = len(data) + except: + pass + + if not length: + # Check if the stream is a file-like stream object. + # If so, calculate the size using the file descriptor. + try: + fileno = data.fileno() + except (AttributeError, UnsupportedOperation): + pass + else: + return fstat(fileno).st_size + + # If the stream is seekable and tell() is implemented, calculate the stream size. + try: + current_position = data.tell() + data.seek(0, SEEK_END) + length = data.tell() - current_position + data.seek(current_position, SEEK_SET) + except (AttributeError, UnsupportedOperation): + pass + + return length diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/cloudstorageaccount.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/cloudstorageaccount.py new file mode 100644 index 00000000000..92b9134a82a --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/cloudstorageaccount.py @@ -0,0 +1,188 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +# Note that we import BlobService/QueueService/FileService on demand +# because this module is imported by azure/storage/__init__ +# ie. we don't want 'import azure.storage' to trigger an automatic import +# of blob/queue/file packages. + +from ._error import _validate_not_none +from .models import ( + ResourceTypes, + Services, + AccountPermissions, +) +from .sharedaccesssignature import ( + SharedAccessSignature, +) + + +class CloudStorageAccount(object): + """ + Provides a factory for creating the blob, queue, and file services + with a common account name and account key or sas token. Users can either + use the factory or can construct the appropriate service directly. + """ + + def __init__(self, account_name=None, account_key=None, sas_token=None, is_emulated=None): + ''' + :param str account_name: + The storage account name. This is used to authenticate requests + signed with an account key and to construct the storage endpoint. It + is required unless is_emulated is used. + :param str account_key: + The storage account key. This is used for shared key authentication. + :param str sas_token: + A shared access signature token to use to authenticate requests + instead of the account key. If account key and sas token are both + specified, account key will be used to sign. + :param bool is_emulated: + Whether to use the emulator. Defaults to False. If specified, will + override all other parameters. + ''' + self.account_name = account_name + self.account_key = account_key + self.sas_token = sas_token + self.is_emulated = is_emulated + + def create_block_blob_service(self): + ''' + Creates a BlockBlobService object with the settings specified in the + CloudStorageAccount. + + :return: A service object. + :rtype: :class:`~azure.storage.blob.blockblobservice.BlockBlobService` + ''' + try: + from azure.storage.blob.blockblobservice import BlockBlobService + return BlockBlobService(self.account_name, self.account_key, + sas_token=self.sas_token, + is_emulated=self.is_emulated) + except ImportError: + raise Exception('The package azure-storage-blob is required. ' + + 'Please install it using "pip install azure-storage-blob"') + + def create_page_blob_service(self): + ''' + Creates a PageBlobService object with the settings specified in the + CloudStorageAccount. + + :return: A service object. + :rtype: :class:`~azure.storage.blob.pageblobservice.PageBlobService` + ''' + try: + from azure.storage.blob.pageblobservice import PageBlobService + return PageBlobService(self.account_name, self.account_key, + sas_token=self.sas_token, + is_emulated=self.is_emulated) + except ImportError: + raise Exception('The package azure-storage-blob is required. ' + + 'Please install it using "pip install azure-storage-blob"') + + def create_append_blob_service(self): + ''' + Creates a AppendBlobService object with the settings specified in the + CloudStorageAccount. + + :return: A service object. + :rtype: :class:`~azure.storage.blob.appendblobservice.AppendBlobService` + ''' + try: + from azure.storage.blob.appendblobservice import AppendBlobService + return AppendBlobService(self.account_name, self.account_key, + sas_token=self.sas_token, + is_emulated=self.is_emulated) + except ImportError: + raise Exception('The package azure-storage-blob is required. ' + + 'Please install it using "pip install azure-storage-blob"') + + def create_queue_service(self): + ''' + Creates a QueueService object with the settings specified in the + CloudStorageAccount. + + :return: A service object. + :rtype: :class:`~azure.storage.queue.queueservice.QueueService` + ''' + try: + from azure.storage.queue.queueservice import QueueService + return QueueService(self.account_name, self.account_key, + sas_token=self.sas_token, + is_emulated=self.is_emulated) + except ImportError: + raise Exception('The package azure-storage-queue is required. ' + + 'Please install it using "pip install azure-storage-queue"') + + def create_file_service(self): + ''' + Creates a FileService object with the settings specified in the + CloudStorageAccount. + + :return: A service object. + :rtype: :class:`~azure.storage.file.fileservice.FileService` + ''' + try: + from azure.storage.file.fileservice import FileService + return FileService(self.account_name, self.account_key, + sas_token=self.sas_token) + except ImportError: + raise Exception('The package azure-storage-file is required. ' + + 'Please install it using "pip install azure-storage-file"') + + def generate_shared_access_signature(self, services, resource_types, + permission, expiry, start=None, + ip=None, protocol=None): + ''' + Generates a shared access signature for the account. + Use the returned signature with the sas_token parameter of the service + or to create a new account object. + + :param Services services: + Specifies the services accessible with the account SAS. You can + combine values to provide access to more than one service. + :param ResourceTypes resource_types: + Specifies the resource types that are accessible with the account + SAS. You can combine values to provide access to more than one + resource type. + :param AccountPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. You can combine + values to provide more than one permission. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. Possible values are + both HTTPS and HTTP (https,http) or HTTPS only (https). The default value + is https,http. Note that HTTP only is not a permitted value. + ''' + _validate_not_none('self.account_name', self.account_name) + _validate_not_none('self.account_key', self.account_key) + + sas = SharedAccessSignature(self.account_name, self.account_key) + return sas.generate_account(services, resource_types, permission, + expiry, start=start, ip=ip, protocol=protocol) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/models.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/models.py new file mode 100644 index 00000000000..e11153c2810 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/models.py @@ -0,0 +1,646 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys + +if sys.version_info < (3,): + from collections import Iterable + + _unicode_type = unicode +else: + from collections.abc import Iterable + + _unicode_type = str + +from ._error import ( + _validate_not_none +) + + +class _HeaderDict(dict): + def __getitem__(self, index): + return super(_HeaderDict, self).__getitem__(index.lower()) + + +class _list(list): + '''Used so that additional properties can be set on the return list''' + pass + + +class _dict(dict): + '''Used so that additional properties can be set on the return dictionary''' + pass + + +class _OperationContext(object): + ''' + Contains information that lasts the lifetime of an operation. This operation + may span multiple calls to the Azure service. + + :ivar bool location_lock: + Whether the location should be locked for this operation. + :ivar str location: + The location to lock to. + ''' + + def __init__(self, location_lock=False): + self.location_lock = location_lock + self.host_location = None + + +class ListGenerator(Iterable): + ''' + A generator object used to list storage resources. The generator will lazily + follow the continuation tokens returned by the service and stop when all + resources have been returned or max_results is reached. + + If max_results is specified and the account has more than that number of + resources, the generator will have a populated next_marker field once it + finishes. This marker can be used to create a new generator if more + results are desired. + ''' + + def __init__(self, resources, list_method, list_args, list_kwargs): + self.items = resources + self.next_marker = resources.next_marker + + self._list_method = list_method + self._list_args = list_args + self._list_kwargs = list_kwargs + + def __iter__(self): + # return results + for i in self.items: + yield i + + while True: + # if no more results on the service, return + if not self.next_marker: + break + + # update the marker args + self._list_kwargs['marker'] = self.next_marker + + # handle max results, if present + max_results = self._list_kwargs.get('max_results') + if max_results is not None: + max_results = max_results - len(self.items) + + # if we've reached max_results, return + # else, update the max_results arg + if max_results <= 0: + break + else: + self._list_kwargs['max_results'] = max_results + + # get the next segment + resources = self._list_method(*self._list_args, **self._list_kwargs) + self.items = resources + self.next_marker = resources.next_marker + + # return results + for i in self.items: + yield i + + +class RetryContext(object): + ''' + Contains the request and response information that can be used to determine + whether and how to retry. This context is stored across retries and may be + used to store other information relevant to the retry strategy. + + :ivar ~azure.storage.common._http.HTTPRequest request: + The request sent to the storage service. + :ivar ~azure.storage.common._http.HTTPResponse response: + The response returned by the storage service. + :ivar LocationMode location_mode: + The location the request was sent to. + :ivar Exception exception: + The exception that just occurred. The type could either be AzureException (for HTTP errors), + or other Exception types from lower layers, which are kept unwrapped for easier processing. + :ivar bool is_emulated: + Whether retry is targeting the emulator. The default value is False. + ''' + + def __init__(self): + self.request = None + self.response = None + self.location_mode = None + self.exception = None + self.is_emulated = False + + +class LocationMode(object): + ''' + Specifies the location the request should be sent to. This mode only applies + for RA-GRS accounts which allow secondary read access. All other account types + must use PRIMARY. + ''' + + PRIMARY = 'primary' + ''' Requests should be sent to the primary location. ''' + + SECONDARY = 'secondary' + ''' Requests should be sent to the secondary location, if possible. ''' + + +class RetentionPolicy(object): + ''' + By default, Storage Analytics will not delete any logging or metrics data. Blobs + will continue to be written until the shared 20TB limit is + reached. Once the 20TB limit is reached, Storage Analytics will stop writing + new data and will not resume until free space is available. This 20TB limit + is independent of the total limit for your storage account. + + There are two ways to delete Storage Analytics data: by manually making deletion + requests or by setting a data retention policy. Manual requests to delete Storage + Analytics data are billable, but delete requests resulting from a retention policy + are not billable. + ''' + + def __init__(self, enabled=False, days=None): + ''' + :param bool enabled: + Indicates whether a retention policy is enabled for the + storage service. If disabled, logging and metrics data will be retained + infinitely by the service unless explicitly deleted. + :param int days: + Required if enabled is true. Indicates the number of + days that metrics or logging data should be retained. All data older + than this value will be deleted. The minimum value you can specify is 1; + the largest value is 365 (one year). + ''' + _validate_not_none("enabled", enabled) + if enabled: + _validate_not_none("days", days) + + self.enabled = enabled + self.days = days + + +class Logging(object): + ''' + Storage Analytics logs detailed information about successful and failed requests + to a storage service. This information can be used to monitor individual requests + and to diagnose issues with a storage service. Requests are logged on a best-effort + basis. + + All logs are stored in block blobs in a container named $logs, which is + automatically created when Storage Analytics is enabled for a storage account. + The $logs container is located in the blob namespace of the storage account. + This container cannot be deleted once Storage Analytics has been enabled, though + its contents can be deleted. + + For more information, see https://msdn.microsoft.com/en-us/library/azure/hh343262.aspx + ''' + + def __init__(self, delete=False, read=False, write=False, + retention_policy=None): + ''' + :param bool delete: + Indicates whether all delete requests should be logged. + :param bool read: + Indicates whether all read requests should be logged. + :param bool write: + Indicates whether all write requests should be logged. + :param RetentionPolicy retention_policy: + The retention policy for the metrics. + ''' + _validate_not_none("read", read) + _validate_not_none("write", write) + _validate_not_none("delete", delete) + + self.version = u'1.0' + self.delete = delete + self.read = read + self.write = write + self.retention_policy = retention_policy if retention_policy else RetentionPolicy() + + +class Metrics(object): + ''' + Metrics include aggregated transaction statistics and capacity data about requests + to a storage service. Transactions are reported at both the API operation level + as well as at the storage service level, and capacity is reported at the storage + service level. Metrics data can be used to analyze storage service usage, diagnose + issues with requests made against the storage service, and to improve the + performance of applications that use a service. + + For more information, see https://msdn.microsoft.com/en-us/library/azure/hh343258.aspx + ''' + + def __init__(self, enabled=False, include_apis=None, + retention_policy=None): + ''' + :param bool enabled: + Indicates whether metrics are enabled for + the service. + :param bool include_apis: + Required if enabled is True. Indicates whether metrics + should generate summary statistics for called API operations. + :param RetentionPolicy retention_policy: + The retention policy for the metrics. + ''' + _validate_not_none("enabled", enabled) + if enabled: + _validate_not_none("include_apis", include_apis) + + self.version = u'1.0' + self.enabled = enabled + self.include_apis = include_apis + self.retention_policy = retention_policy if retention_policy else RetentionPolicy() + + +class CorsRule(object): + ''' + CORS is an HTTP feature that enables a web application running under one domain + to access resources in another domain. Web browsers implement a security + restriction known as same-origin policy that prevents a web page from calling + APIs in a different domain; CORS provides a secure way to allow one domain + (the origin domain) to call APIs in another domain. + + For more information, see https://msdn.microsoft.com/en-us/library/azure/dn535601.aspx + ''' + + def __init__(self, allowed_origins, allowed_methods, max_age_in_seconds=0, + exposed_headers=None, allowed_headers=None): + ''' + :param allowed_origins: + A list of origin domains that will be allowed via CORS, or "*" to allow + all domains. The list of must contain at least one entry. Limited to 64 + origin domains. Each allowed origin can have up to 256 characters. + :type allowed_origins: list(str) + :param allowed_methods: + A list of HTTP methods that are allowed to be executed by the origin. + The list of must contain at least one entry. For Azure Storage, + permitted methods are DELETE, GET, HEAD, MERGE, POST, OPTIONS or PUT. + :type allowed_methods: list(str) + :param int max_age_in_seconds: + The number of seconds that the client/browser should cache a + preflight response. + :param exposed_headers: + Defaults to an empty list. A list of response headers to expose to CORS + clients. Limited to 64 defined headers and two prefixed headers. Each + header can be up to 256 characters. + :type exposed_headers: list(str) + :param allowed_headers: + Defaults to an empty list. A list of headers allowed to be part of + the cross-origin request. Limited to 64 defined headers and 2 prefixed + headers. Each header can be up to 256 characters. + :type allowed_headers: list(str) + ''' + _validate_not_none("allowed_origins", allowed_origins) + _validate_not_none("allowed_methods", allowed_methods) + _validate_not_none("max_age_in_seconds", max_age_in_seconds) + + self.allowed_origins = allowed_origins if allowed_origins else list() + self.allowed_methods = allowed_methods if allowed_methods else list() + self.max_age_in_seconds = max_age_in_seconds + self.exposed_headers = exposed_headers if exposed_headers else list() + self.allowed_headers = allowed_headers if allowed_headers else list() + + +class DeleteRetentionPolicy(object): + ''' + To set DeleteRetentionPolicy, you must call Set Blob Service Properties using version 2017-07-29 or later. + This class groups the settings related to delete retention policy. + ''' + + def __init__(self, enabled=False, days=None): + ''' + :param bool enabled: + Required. Indicates whether a deleted blob or snapshot is retained or immediately removed by delete operation. + :param int days: + Required only if Enabled is true. Indicates the number of days that deleted blob be retained. + All data older than this value will be permanently deleted. + The minimum value you can specify is 1; the largest value is 365. + ''' + _validate_not_none("enabled", enabled) + if enabled: + _validate_not_none("days", days) + + self.enabled = enabled + self.days = days + + +class ServiceProperties(object): + ''' + Returned by get_*_service_properties functions. Contains the properties of a + storage service, including Analytics and CORS rules. + + Azure Storage Analytics performs logging and provides metrics data for a storage + account. You can use this data to trace requests, analyze usage trends, and + diagnose issues with your storage account. To use Storage Analytics, you must + enable it individually for each service you want to monitor. + + The aggregated data is stored in a well-known blob (for logging) and in well-known + tables (for metrics), which may be accessed using the Blob service and Table + service APIs. + + For an in-depth guide on using Storage Analytics and other tools to identify, + diagnose, and troubleshoot Azure Storage-related issues, see + http://azure.microsoft.com/documentation/articles/storage-monitoring-diagnosing-troubleshooting/ + + For more information on CORS, see https://msdn.microsoft.com/en-us/library/azure/dn535601.aspx + ''' + + pass + + +class ServiceStats(object): + ''' + Returned by get_*_service_stats functions. Contains statistics related to + replication for the given service. It is only available when read-access + geo-redundant replication is enabled for the storage account. + + :ivar GeoReplication geo_replication: + An object containing statistics related to replication for the given service. + ''' + pass + + +class GeoReplication(object): + ''' + Contains statistics related to replication for the given service. + + :ivar str status: + The status of the secondary location. Possible values are: + live: Indicates that the secondary location is active and operational. + bootstrap: Indicates initial synchronization from the primary location + to the secondary location is in progress. This typically occurs + when replication is first enabled. + unavailable: Indicates that the secondary location is temporarily + unavailable. + :ivar date last_sync_time: + A GMT date value, to the second. All primary writes preceding this value + are guaranteed to be available for read operations at the secondary. + Primary writes after this point in time may or may not be available for + reads. The value may be empty if LastSyncTime is not available. This can + happen if the replication status is bootstrap or unavailable. Although + geo-replication is continuously enabled, the LastSyncTime result may + reflect a cached value from the service that is refreshed every few minutes. + ''' + pass + + +class AccessPolicy(object): + ''' + Access Policy class used by the set and get acl methods in each service. + + A stored access policy can specify the start time, expiry time, and + permissions for the Shared Access Signatures with which it's associated. + Depending on how you want to control access to your resource, you can + specify all of these parameters within the stored access policy, and omit + them from the URL for the Shared Access Signature. Doing so permits you to + modify the associated signature's behavior at any time, as well as to revoke + it. Or you can specify one or more of the access policy parameters within + the stored access policy, and the others on the URL. Finally, you can + specify all of the parameters on the URL. In this case, you can use the + stored access policy to revoke the signature, but not to modify its behavior. + + Together the Shared Access Signature and the stored access policy must + include all fields required to authenticate the signature. If any required + fields are missing, the request will fail. Likewise, if a field is specified + both in the Shared Access Signature URL and in the stored access policy, the + request will fail with status code 400 (Bad Request). + ''' + + def __init__(self, permission=None, expiry=None, start=None): + ''' + :param str permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + ''' + self.start = start + self.expiry = expiry + self.permission = permission + + +class Protocol(object): + ''' + Specifies the protocol permitted for a SAS token. Note that HTTP only is + not allowed. + ''' + + HTTPS = 'https' + ''' Allow HTTPS requests only. ''' + + HTTPS_HTTP = 'https,http' + ''' Allow HTTP and HTTPS requests. ''' + + +class ResourceTypes(object): + ''' + Specifies the resource types that are accessible with the account SAS. + + :ivar ResourceTypes ResourceTypes.CONTAINER: + Access to container-level APIs (e.g., Create/Delete Container, + Create/Delete Queue, Create/Delete Share, + List Blobs/Files and Directories) + :ivar ResourceTypes ResourceTypes.OBJECT: + Access to object-level APIs for blobs, queue messages, and + files(e.g. Put Blob, Query Entity, Get Messages, Create File, etc.) + :ivar ResourceTypes ResourceTypes.SERVICE: + Access to service-level APIs (e.g., Get/Set Service Properties, + Get Service Stats, List Containers/Queues/Shares) + ''' + + def __init__(self, service=False, container=False, object=False, _str=None): + ''' + :param bool service: + Access to service-level APIs (e.g., Get/Set Service Properties, + Get Service Stats, List Containers/Queues/Shares) + :param bool container: + Access to container-level APIs (e.g., Create/Delete Container, + Create/Delete Queue, Create/Delete Share, + List Blobs/Files and Directories) + :param bool object: + Access to object-level APIs for blobs, queue messages, and + files(e.g. Put Blob, Query Entity, Get Messages, Create File, etc.) + :param str _str: + A string representing the resource types. + ''' + if not _str: + _str = '' + self.service = service or ('s' in _str) + self.container = container or ('c' in _str) + self.object = object or ('o' in _str) + + def __or__(self, other): + return ResourceTypes(_str=str(self) + str(other)) + + def __add__(self, other): + return ResourceTypes(_str=str(self) + str(other)) + + def __str__(self): + return (('s' if self.service else '') + + ('c' if self.container else '') + + ('o' if self.object else '')) + + +ResourceTypes.SERVICE = ResourceTypes(service=True) +ResourceTypes.CONTAINER = ResourceTypes(container=True) +ResourceTypes.OBJECT = ResourceTypes(object=True) + + +class Services(object): + ''' + Specifies the services accessible with the account SAS. + + :ivar Services Services.BLOB: The blob service. + :ivar Services Services.FILE: The file service + :ivar Services Services.QUEUE: The queue service. + :ivar Services Services.TABLE: The table service. + ''' + + def __init__(self, blob=False, queue=False, file=False, table=False, _str=None): + ''' + :param bool blob: + Access to any blob service, for example, the `.BlockBlobService` + :param bool queue: + Access to the `.QueueService` + :param bool file: + Access to the `.FileService` + :param bool table: + Access to the TableService + :param str _str: + A string representing the services. + ''' + if not _str: + _str = '' + self.blob = blob or ('b' in _str) + self.queue = queue or ('q' in _str) + self.file = file or ('f' in _str) + self.table = table or ('t' in _str) + + def __or__(self, other): + return Services(_str=str(self) + str(other)) + + def __add__(self, other): + return Services(_str=str(self) + str(other)) + + def __str__(self): + return (('b' if self.blob else '') + + ('q' if self.queue else '') + + ('t' if self.table else '') + + ('f' if self.file else '')) + + +Services.BLOB = Services(blob=True) +Services.QUEUE = Services(queue=True) +Services.TABLE = Services(table=True) +Services.FILE = Services(file=True) + + +class AccountPermissions(object): + ''' + :class:`~ResourceTypes` class to be used with generate_shared_access_signature + method and for the AccessPolicies used with set_*_acl. There are two types of + SAS which may be used to grant resource access. One is to grant access to a + specific resource (resource-specific). Another is to grant access to the + entire service for a specific account and allow certain operations based on + perms found here. + + :ivar AccountPermissions AccountPermissions.ADD: + Valid for the following Object resource types only: queue messages and append blobs. + :ivar AccountPermissions AccountPermissions.CREATE: + Valid for the following Object resource types only: blobs and files. Users + can create new blobs or files, but may not overwrite existing blobs or files. + :ivar AccountPermissions AccountPermissions.DELETE: + Valid for Container and Object resource types, except for queue messages. + :ivar AccountPermissions AccountPermissions.LIST: + Valid for Service and Container resource types only. + :ivar AccountPermissions AccountPermissions.PROCESS: + Valid for the following Object resource type only: queue messages. + :ivar AccountPermissions AccountPermissions.READ: + Valid for all signed resources types (Service, Container, and Object). + Permits read permissions to the specified resource type. + :ivar AccountPermissions AccountPermissions.UPDATE: + Valid for the following Object resource types only: queue messages. + :ivar AccountPermissions AccountPermissions.WRITE: + Valid for all signed resources types (Service, Container, and Object). + Permits write permissions to the specified resource type. + ''' + + def __init__(self, read=False, write=False, delete=False, list=False, + add=False, create=False, update=False, process=False, _str=None): + ''' + :param bool read: + Valid for all signed resources types (Service, Container, and Object). + Permits read permissions to the specified resource type. + :param bool write: + Valid for all signed resources types (Service, Container, and Object). + Permits write permissions to the specified resource type. + :param bool delete: + Valid for Container and Object resource types, except for queue messages. + :param bool list: + Valid for Service and Container resource types only. + :param bool add: + Valid for the following Object resource types only: queue messages, and append blobs. + :param bool create: + Valid for the following Object resource types only: blobs and files. + Users can create new blobs or files, but may not overwrite existing + blobs or files. + :param bool update: + Valid for the following Object resource types only: queue messages. + :param bool process: + Valid for the following Object resource type only: queue messages. + :param str _str: + A string representing the permissions. + ''' + if not _str: + _str = '' + self.read = read or ('r' in _str) + self.write = write or ('w' in _str) + self.delete = delete or ('d' in _str) + self.list = list or ('l' in _str) + self.add = add or ('a' in _str) + self.create = create or ('c' in _str) + self.update = update or ('u' in _str) + self.process = process or ('p' in _str) + + def __or__(self, other): + return AccountPermissions(_str=str(self) + str(other)) + + def __add__(self, other): + return AccountPermissions(_str=str(self) + str(other)) + + def __str__(self): + return (('r' if self.read else '') + + ('w' if self.write else '') + + ('d' if self.delete else '') + + ('l' if self.list else '') + + ('a' if self.add else '') + + ('c' if self.create else '') + + ('u' if self.update else '') + + ('p' if self.process else '')) + + +AccountPermissions.READ = AccountPermissions(read=True) +AccountPermissions.WRITE = AccountPermissions(write=True) +AccountPermissions.DELETE = AccountPermissions(delete=True) +AccountPermissions.LIST = AccountPermissions(list=True) +AccountPermissions.ADD = AccountPermissions(add=True) +AccountPermissions.CREATE = AccountPermissions(create=True) +AccountPermissions.UPDATE = AccountPermissions(update=True) +AccountPermissions.PROCESS = AccountPermissions(process=True) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/retry.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/retry.py new file mode 100644 index 00000000000..69dafef9cfe --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/retry.py @@ -0,0 +1,292 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from abc import ABCMeta +from math import pow +import random + +from .models import LocationMode +from ._constants import ( + DEV_ACCOUNT_NAME, + DEV_ACCOUNT_SECONDARY_NAME +) + + +class _Retry(object): + ''' + The base class for Exponential and Linear retries containing shared code. + ''' + __metaclass__ = ABCMeta + + def __init__(self, max_attempts, retry_to_secondary): + ''' + Constructs a base retry object. + + :param int max_attempts: + The maximum number of retry attempts. + :param bool retry_to_secondary: + Whether the request should be retried to secondary, if able. This should + only be enabled of RA-GRS accounts are used and potentially stale data + can be handled. + ''' + self.max_attempts = max_attempts + self.retry_to_secondary = retry_to_secondary + + def _should_retry(self, context): + ''' + A function which determines whether or not to retry. + + :param ~azure.storage.models.RetryContext context: + The retry context. This contains the request, response, and other data + which can be used to determine whether or not to retry. + :return: + A boolean indicating whether or not to retry the request. + :rtype: bool + ''' + # If max attempts are reached, do not retry. + if context.count >= self.max_attempts: + return False + + status = None + if context.response and context.response.status: + status = context.response.status + + if status is None: + ''' + If status is None, retry as this request triggered an exception. For + example, network issues would trigger this. + ''' + return True + elif 200 <= status < 300: + ''' + This method is called after a successful response, meaning we failed + during the response body download or parsing. So, success codes should + be retried. + ''' + return True + elif 300 <= status < 500: + ''' + An exception occured, but in most cases it was expected. Examples could + include a 309 Conflict or 412 Precondition Failed. + ''' + if status == 404 and context.location_mode == LocationMode.SECONDARY: + # Response code 404 should be retried if secondary was used. + return True + if status == 408: + # Response code 408 is a timeout and should be retried. + return True + return False + elif status >= 500: + ''' + Response codes above 500 with the exception of 501 Not Implemented and + 505 Version Not Supported indicate a server issue and should be retried. + ''' + if status == 501 or status == 505: + return False + return True + else: + # If something else happened, it's unexpected. Retry. + return True + + def _set_next_host_location(self, context): + ''' + A function which sets the next host location on the request, if applicable. + + :param ~azure.storage.models.RetryContext context: + The retry context containing the previous host location and the request + to evaluate and possibly modify. + ''' + if len(context.request.host_locations) > 1: + # If there's more than one possible location, retry to the alternative + if context.location_mode == LocationMode.PRIMARY: + context.location_mode = LocationMode.SECONDARY + + # if targeting the emulator (with path style), change path instead of host + if context.is_emulated: + # replace the first instance of primary account name with the secondary account name + context.request.path = context.request.path.replace(DEV_ACCOUNT_NAME, DEV_ACCOUNT_SECONDARY_NAME, 1) + else: + context.request.host = context.request.host_locations.get(context.location_mode) + else: + context.location_mode = LocationMode.PRIMARY + + # if targeting the emulator (with path style), change path instead of host + if context.is_emulated: + # replace the first instance of secondary account name with the primary account name + context.request.path = context.request.path.replace(DEV_ACCOUNT_SECONDARY_NAME, DEV_ACCOUNT_NAME, 1) + else: + context.request.host = context.request.host_locations.get(context.location_mode) + + def _retry(self, context, backoff): + ''' + A function which determines whether and how to retry. + + :param ~azure.storage.models.RetryContext context: + The retry context. This contains the request, response, and other data + which can be used to determine whether or not to retry. + :param function() backoff: + A function which returns the backoff time if a retry is to be performed. + :return: + An integer indicating how long to wait before retrying the request, + or None to indicate no retry should be performed. + :rtype: int or None + ''' + # If the context does not contain a count parameter, this request has not + # been retried yet. Add the count parameter to track the number of retries. + if not hasattr(context, 'count'): + context.count = 0 + + # Determine whether to retry, and if so increment the count, modify the + # request as desired, and return the backoff. + if self._should_retry(context): + backoff_interval = backoff(context) + context.count += 1 + + # If retry to secondary is enabled, attempt to change the host if the + # request allows it + if self.retry_to_secondary: + self._set_next_host_location(context) + + return backoff_interval + + return None + + +class ExponentialRetry(_Retry): + ''' + Exponential retry. + ''' + + def __init__(self, initial_backoff=15, increment_base=3, max_attempts=3, + retry_to_secondary=False, random_jitter_range=3): + ''' + Constructs an Exponential retry object. The initial_backoff is used for + the first retry. Subsequent retries are retried after initial_backoff + + increment_power^retry_count seconds. For example, by default the first retry + occurs after 15 seconds, the second after (15+3^1) = 18 seconds, and the + third after (15+3^2) = 24 seconds. + + :param int initial_backoff: + The initial backoff interval, in seconds, for the first retry. + :param int increment_base: + The base, in seconds, to increment the initial_backoff by after the + first retry. + :param int max_attempts: + The maximum number of retry attempts. + :param bool retry_to_secondary: + Whether the request should be retried to secondary, if able. This should + only be enabled of RA-GRS accounts are used and potentially stale data + can be handled. + :param int random_jitter_range: + A number in seconds which indicates a range to jitter/randomize for the back-off interval. + For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3. + ''' + self.initial_backoff = initial_backoff + self.increment_base = increment_base + self.random_jitter_range = random_jitter_range + super(ExponentialRetry, self).__init__(max_attempts, retry_to_secondary) + + ''' + A function which determines whether and how to retry. + + :param ~azure.storage.models.RetryContext context: + The retry context. This contains the request, response, and other data + which can be used to determine whether or not to retry. + :return: + An integer indicating how long to wait before retrying the request, + or None to indicate no retry should be performed. + :rtype: int or None + ''' + + def retry(self, context): + return self._retry(context, self._backoff) + + ''' + Calculates how long to sleep before retrying. + + :return: + An integer indicating how long to wait before retrying the request, + or None to indicate no retry should be performed. + :rtype: int or None + ''' + + def _backoff(self, context): + random_generator = random.Random() + backoff = self.initial_backoff + (0 if context.count == 0 else pow(self.increment_base, context.count)) + random_range_start = backoff - self.random_jitter_range if backoff > self.random_jitter_range else 0 + random_range_end = backoff + self.random_jitter_range + return random_generator.uniform(random_range_start, random_range_end) + + +class LinearRetry(_Retry): + ''' + Linear retry. + ''' + + def __init__(self, backoff=15, max_attempts=3, retry_to_secondary=False, random_jitter_range=3): + ''' + Constructs a Linear retry object. + + :param int backoff: + The backoff interval, in seconds, between retries. + :param int max_attempts: + The maximum number of retry attempts. + :param bool retry_to_secondary: + Whether the request should be retried to secondary, if able. This should + only be enabled of RA-GRS accounts are used and potentially stale data + can be handled. + :param int random_jitter_range: + A number in seconds which indicates a range to jitter/randomize for the back-off interval. + For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3. + ''' + self.backoff = backoff + self.max_attempts = max_attempts + self.random_jitter_range = random_jitter_range + super(LinearRetry, self).__init__(max_attempts, retry_to_secondary) + + ''' + A function which determines whether and how to retry. + + :param ~azure.storage.models.RetryContext context: + The retry context. This contains the request, response, and other data + which can be used to determine whether or not to retry. + :return: + An integer indicating how long to wait before retrying the request, + or None to indicate no retry should be performed. + :rtype: int or None + ''' + + def retry(self, context): + return self._retry(context, self._backoff) + + ''' + Calculates how long to sleep before retrying. + + :return: + An integer indicating how long to wait before retrying the request, + or None to indicate no retry should be performed. + :rtype: int or None + ''' + + def _backoff(self, context): + random_generator = random.Random() + # the backoff interval normally does not change, however there is the possibility + # that it was modified by accessing the property directly after initializing the object + self.random_range_start = self.backoff - self.random_jitter_range if self.backoff > self.random_jitter_range else 0 + self.random_range_end = self.backoff + self.random_jitter_range + return random_generator.uniform(self.random_range_start, self.random_range_end) + + +def no_retry(context): + ''' + Specifies never to retry. + + :param ~azure.storage.models.RetryContext context: + The retry context. + :return: + Always returns None to indicate never to retry. + :rtype: None + ''' + return None diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/sharedaccesssignature.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/sharedaccesssignature.py new file mode 100644 index 00000000000..c23201a85bc --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/sharedaccesssignature.py @@ -0,0 +1,217 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from datetime import date + +from ._common_conversion import ( + _sign_string, + _to_str, +) +from ._constants import DEFAULT_X_MS_VERSION +from ._serialization import ( + url_quote, + _to_utc_datetime, +) + + +class SharedAccessSignature(object): + ''' + Provides a factory for creating account access + signature tokens with an account name and account key. Users can either + use the factory or can construct the appropriate service and use the + generate_*_shared_access_signature method directly. + ''' + + def __init__(self, account_name, account_key, x_ms_version=DEFAULT_X_MS_VERSION): + ''' + :param str account_name: + The storage account name used to generate the shared access signatures. + :param str account_key: + The access key to generate the shares access signatures. + :param str x_ms_version: + The service version used to generate the shared access signatures. + ''' + self.account_name = account_name + self.account_key = account_key + self.x_ms_version = x_ms_version + + def generate_account(self, services, resource_types, permission, expiry, start=None, + ip=None, protocol=None): + ''' + Generates a shared access signature for the account. + Use the returned signature with the sas_token parameter of the service + or to create a new account object. + + :param Services services: + Specifies the services accessible with the account SAS. You can + combine values to provide access to more than one service. + :param ResourceTypes resource_types: + Specifies the resource types that are accessible with the account + SAS. You can combine values to provide access to more than one + resource type. + :param AccountPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. You can combine + values to provide more than one permission. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values. + ''' + sas = _SharedAccessHelper() + sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) + sas.add_account(services, resource_types) + sas.add_account_signature(self.account_name, self.account_key) + + return sas.get_token() + + +class _QueryStringConstants(object): + SIGNED_SIGNATURE = 'sig' + SIGNED_PERMISSION = 'sp' + SIGNED_START = 'st' + SIGNED_EXPIRY = 'se' + SIGNED_RESOURCE = 'sr' + SIGNED_IDENTIFIER = 'si' + SIGNED_IP = 'sip' + SIGNED_PROTOCOL = 'spr' + SIGNED_VERSION = 'sv' + SIGNED_CACHE_CONTROL = 'rscc' + SIGNED_CONTENT_DISPOSITION = 'rscd' + SIGNED_CONTENT_ENCODING = 'rsce' + SIGNED_CONTENT_LANGUAGE = 'rscl' + SIGNED_CONTENT_TYPE = 'rsct' + START_PK = 'spk' + START_RK = 'srk' + END_PK = 'epk' + END_RK = 'erk' + SIGNED_RESOURCE_TYPES = 'srt' + SIGNED_SERVICES = 'ss' + + +class _SharedAccessHelper(object): + def __init__(self): + self.query_dict = {} + + def _add_query(self, name, val): + if val: + self.query_dict[name] = _to_str(val) + + def add_base(self, permission, expiry, start, ip, protocol, x_ms_version): + if isinstance(start, date): + start = _to_utc_datetime(start) + + if isinstance(expiry, date): + expiry = _to_utc_datetime(expiry) + + self._add_query(_QueryStringConstants.SIGNED_START, start) + self._add_query(_QueryStringConstants.SIGNED_EXPIRY, expiry) + self._add_query(_QueryStringConstants.SIGNED_PERMISSION, permission) + self._add_query(_QueryStringConstants.SIGNED_IP, ip) + self._add_query(_QueryStringConstants.SIGNED_PROTOCOL, protocol) + self._add_query(_QueryStringConstants.SIGNED_VERSION, x_ms_version) + + def add_resource(self, resource): + self._add_query(_QueryStringConstants.SIGNED_RESOURCE, resource) + + def add_id(self, id): + self._add_query(_QueryStringConstants.SIGNED_IDENTIFIER, id) + + def add_account(self, services, resource_types): + self._add_query(_QueryStringConstants.SIGNED_SERVICES, services) + self._add_query(_QueryStringConstants.SIGNED_RESOURCE_TYPES, resource_types) + + def add_override_response_headers(self, cache_control, + content_disposition, + content_encoding, + content_language, + content_type): + self._add_query(_QueryStringConstants.SIGNED_CACHE_CONTROL, cache_control) + self._add_query(_QueryStringConstants.SIGNED_CONTENT_DISPOSITION, content_disposition) + self._add_query(_QueryStringConstants.SIGNED_CONTENT_ENCODING, content_encoding) + self._add_query(_QueryStringConstants.SIGNED_CONTENT_LANGUAGE, content_language) + self._add_query(_QueryStringConstants.SIGNED_CONTENT_TYPE, content_type) + + def add_resource_signature(self, account_name, account_key, service, path): + def get_value_to_append(query): + return_value = self.query_dict.get(query) or '' + return return_value + '\n' + + if path[0] != '/': + path = '/' + path + + canonicalized_resource = '/' + service + '/' + account_name + path + '\n' + + # Form the string to sign from shared_access_policy and canonicalized + # resource. The order of values is important. + string_to_sign = \ + (get_value_to_append(_QueryStringConstants.SIGNED_PERMISSION) + + get_value_to_append(_QueryStringConstants.SIGNED_START) + + get_value_to_append(_QueryStringConstants.SIGNED_EXPIRY) + + canonicalized_resource + + get_value_to_append(_QueryStringConstants.SIGNED_IDENTIFIER) + + get_value_to_append(_QueryStringConstants.SIGNED_IP) + + get_value_to_append(_QueryStringConstants.SIGNED_PROTOCOL) + + get_value_to_append(_QueryStringConstants.SIGNED_VERSION)) + + if service == 'blob' or service == 'file': + string_to_sign += \ + (get_value_to_append(_QueryStringConstants.SIGNED_CACHE_CONTROL) + + get_value_to_append(_QueryStringConstants.SIGNED_CONTENT_DISPOSITION) + + get_value_to_append(_QueryStringConstants.SIGNED_CONTENT_ENCODING) + + get_value_to_append(_QueryStringConstants.SIGNED_CONTENT_LANGUAGE) + + get_value_to_append(_QueryStringConstants.SIGNED_CONTENT_TYPE)) + + # remove the trailing newline + if string_to_sign[-1] == '\n': + string_to_sign = string_to_sign[:-1] + + self._add_query(_QueryStringConstants.SIGNED_SIGNATURE, + _sign_string(account_key, string_to_sign)) + + def add_account_signature(self, account_name, account_key): + def get_value_to_append(query): + return_value = self.query_dict.get(query) or '' + return return_value + '\n' + + string_to_sign = \ + (account_name + '\n' + + get_value_to_append(_QueryStringConstants.SIGNED_PERMISSION) + + get_value_to_append(_QueryStringConstants.SIGNED_SERVICES) + + get_value_to_append(_QueryStringConstants.SIGNED_RESOURCE_TYPES) + + get_value_to_append(_QueryStringConstants.SIGNED_START) + + get_value_to_append(_QueryStringConstants.SIGNED_EXPIRY) + + get_value_to_append(_QueryStringConstants.SIGNED_IP) + + get_value_to_append(_QueryStringConstants.SIGNED_PROTOCOL) + + get_value_to_append(_QueryStringConstants.SIGNED_VERSION)) + + self._add_query(_QueryStringConstants.SIGNED_SIGNATURE, + _sign_string(account_key, string_to_sign)) + + def get_token(self): + return '&'.join(['{0}={1}'.format(n, url_quote(v)) for n, v in self.query_dict.items() if v is not None]) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/storageclient.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/storageclient.py new file mode 100644 index 00000000000..da007dc1911 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/storageclient.py @@ -0,0 +1,364 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +import sys +from abc import ABCMeta +import logging + +logger = logging.getLogger(__name__) +from time import sleep + +import requests +from azure.common import ( + AzureException, +) + +from ._constants import ( + DEFAULT_SOCKET_TIMEOUT, + DEFAULT_X_MS_VERSION, + DEFAULT_USER_AGENT_STRING, + USER_AGENT_STRING_PREFIX, + USER_AGENT_STRING_SUFFIX, +) +from ._error import ( + _ERROR_DECRYPTION_FAILURE, + _http_error_handler, +) +from ._http import HTTPError +from ._http.httpclient import _HTTPClient +from ._serialization import ( + _update_request, + _add_date_header, +) +from .models import ( + RetryContext, + LocationMode, + _OperationContext, +) +from .retry import ExponentialRetry + + +class StorageClient(object): + ''' + This is the base class for service objects. Service objects are used to do + all requests to Storage. This class cannot be instantiated directly. + + :ivar str account_name: + The storage account name. This is used to authenticate requests + signed with an account key and to construct the storage endpoint. It + is required unless a connection string is given, or if a custom + domain is used with anonymous authentication. + :ivar str account_key: + The storage account key. This is used for shared key authentication. + If neither account key or sas token is specified, anonymous access + will be used. + :ivar str sas_token: + A shared access signature token to use to authenticate requests + instead of the account key. If account key and sas token are both + specified, account key will be used to sign. If neither are + specified, anonymous access will be used. + :ivar str primary_endpoint: + The endpoint to send storage requests to. + :ivar str secondary_endpoint: + The secondary endpoint to read storage data from. This will only be a + valid endpoint if the storage account used is RA-GRS and thus allows + reading from secondary. + :ivar function(context) retry: + A function which determines whether to retry. Takes as a parameter a + :class:`~azure.storage.common.models.RetryContext` object. Returns the number + of seconds to wait before retrying the request, or None to indicate not + to retry. + :ivar ~azure.storage.common.models.LocationMode location_mode: + The host location to use to make requests. Defaults to LocationMode.PRIMARY. + Note that this setting only applies to RA-GRS accounts as other account + types do not allow reading from secondary. If the location_mode is set to + LocationMode.SECONDARY, read requests will be sent to the secondary endpoint. + Write requests will continue to be sent to primary. + :ivar str protocol: + The protocol to use for requests. Defaults to https. + :ivar requests.Session request_session: + The session object to use for http requests. + :ivar function(request) request_callback: + A function called immediately before each request is sent. This function + takes as a parameter the request object and returns nothing. It may be + used to added custom headers or log request data. + :ivar function() response_callback: + A function called immediately after each response is received. This + function takes as a parameter the response object and returns nothing. + It may be used to log response data. + :ivar function() retry_callback: + A function called immediately after retry evaluation is performed. This + function takes as a parameter the retry context object and returns nothing. + It may be used to detect retries and log context information. + ''' + + __metaclass__ = ABCMeta + + def __init__(self, connection_params): + ''' + :param obj connection_params: The parameters to use to construct the client. + ''' + self.account_name = connection_params.account_name + self.account_key = connection_params.account_key + self.sas_token = connection_params.sas_token + self.token_credential = connection_params.token_credential + self.is_emulated = connection_params.is_emulated + + self.primary_endpoint = connection_params.primary_endpoint + self.secondary_endpoint = connection_params.secondary_endpoint + + protocol = connection_params.protocol + request_session = connection_params.request_session or requests.Session() + socket_timeout = connection_params.socket_timeout or DEFAULT_SOCKET_TIMEOUT + self._httpclient = _HTTPClient( + protocol=protocol, + session=request_session, + timeout=socket_timeout, + ) + + self.retry = ExponentialRetry().retry + self.location_mode = LocationMode.PRIMARY + + self.request_callback = None + self.response_callback = None + self.retry_callback = None + self._X_MS_VERSION = DEFAULT_X_MS_VERSION + self._USER_AGENT_STRING = DEFAULT_USER_AGENT_STRING + + def _update_user_agent_string(self, service_package_version): + self._USER_AGENT_STRING = '{}{} {}'.format(USER_AGENT_STRING_PREFIX, + service_package_version, + USER_AGENT_STRING_SUFFIX) + + @property + def socket_timeout(self): + return self._httpclient.timeout + + @socket_timeout.setter + def socket_timeout(self, value): + self._httpclient.timeout = value + + @property + def protocol(self): + return self._httpclient.protocol + + @protocol.setter + def protocol(self, value): + self._httpclient.protocol = value + + @property + def request_session(self): + return self._httpclient.session + + @request_session.setter + def request_session(self, value): + self._httpclient.session = value + + def set_proxy(self, host, port, user=None, password=None): + ''' + Sets the proxy server host and port for the HTTP CONNECT Tunnelling. + + :param str host: Address of the proxy. Ex: '192.168.0.100' + :param int port: Port of the proxy. Ex: 6000 + :param str user: User for proxy authorization. + :param str password: Password for proxy authorization. + ''' + self._httpclient.set_proxy(host, port, user, password) + + def _get_host_locations(self, primary=True, secondary=False): + locations = {} + if primary: + locations[LocationMode.PRIMARY] = self.primary_endpoint + if secondary: + locations[LocationMode.SECONDARY] = self.secondary_endpoint + return locations + + def _apply_host(self, request, operation_context, retry_context): + if operation_context.location_lock and operation_context.host_location: + # If this is a location locked operation and the location is set, + # override the request location and host_location. + request.host_locations = operation_context.host_location + request.host = list(operation_context.host_location.values())[0] + retry_context.location_mode = list(operation_context.host_location.keys())[0] + elif len(request.host_locations) == 1: + # If only one location is allowed, use that location. + request.host = list(request.host_locations.values())[0] + retry_context.location_mode = list(request.host_locations.keys())[0] + else: + # If multiple locations are possible, choose based on the location mode. + request.host = request.host_locations.get(self.location_mode) + retry_context.location_mode = self.location_mode + + @staticmethod + def extract_date_and_request_id(retry_context): + if getattr(retry_context, 'response', None) is None: + return "" + resp = retry_context.response + + if 'date' in resp.headers and 'x-ms-request-id' in resp.headers: + return str.format("Server-Timestamp={0}, Server-Request-ID={1}", + resp.headers['date'], resp.headers['x-ms-request-id']) + elif 'date' in resp.headers: + return str.format("Server-Timestamp={0}", resp.headers['date']) + elif 'x-ms-request-id' in resp.headers: + return str.format("Server-Request-ID={0}", resp.headers['x-ms-request-id']) + else: + return "" + + def _perform_request(self, request, parser=None, parser_args=None, operation_context=None): + ''' + Sends the request and return response. Catches HTTPError and hands it + to error handler + ''' + operation_context = operation_context or _OperationContext() + retry_context = RetryContext() + retry_context.is_emulated = self.is_emulated + + # Apply the appropriate host based on the location mode + self._apply_host(request, operation_context, retry_context) + + # Apply common settings to the request + _update_request(request, self._X_MS_VERSION, self._USER_AGENT_STRING) + client_request_id_prefix = str.format("Client-Request-ID={0}", request.headers['x-ms-client-request-id']) + + while True: + try: + try: + # Execute the request callback + if self.request_callback: + self.request_callback(request) + + # Add date and auth after the callback so date doesn't get too old and + # authentication is still correct if signed headers are added in the request + # callback. This also ensures retry policies with long back offs + # will work as it resets the time sensitive headers. + _add_date_header(request) + self.authentication.sign_request(request) + + # Set the request context + retry_context.request = request + + # Log the request before it goes out + logger.info("%s Outgoing request: Method=%s, Path=%s, Query=%s, Headers=%s.", + client_request_id_prefix, + request.method, + request.path, + request.query, + str(request.headers).replace('\n', '')) + + # Perform the request + response = self._httpclient.perform_request(request) + + # Execute the response callback + if self.response_callback: + self.response_callback(response) + + # Set the response context + retry_context.response = response + + # Log the response when it comes back + logger.info("%s Receiving Response: " + "%s, HTTP Status Code=%s, Message=%s, Headers=%s.", + client_request_id_prefix, + self.extract_date_and_request_id(retry_context), + response.status, + response.message, + str(request.headers).replace('\n', '')) + + # Parse and wrap HTTP errors in AzureHttpError which inherits from AzureException + if response.status >= 300: + # This exception will be caught by the general error handler + # and raised as an azure http exception + _http_error_handler( + HTTPError(response.status, response.message, response.headers, response.body)) + + # Parse the response + if parser: + if parser_args: + args = [response] + args.extend(parser_args) + return parser(*args) + else: + return parser(response) + else: + return + except AzureException as ex: + retry_context.exception = ex + raise ex + except Exception as ex: + retry_context.exception = ex + if sys.version_info >= (3,): + # Automatic chaining in Python 3 means we keep the trace + raise AzureException(ex.args[0]) + else: + # There isn't a good solution in 2 for keeping the stack trace + # in general, or that will not result in an error in 3 + # However, we can keep the previous error type and message + # TODO: In the future we will log the trace + msg = "" + if len(ex.args) > 0: + msg = ex.args[0] + raise AzureException('{}: {}'.format(ex.__class__.__name__, msg)) + + except AzureException as ex: + # only parse the strings used for logging if logging is at least enabled for CRITICAL + if logger.isEnabledFor(logging.CRITICAL): + exception_str_in_one_line = str(ex).replace('\n', '') + status_code = retry_context.response.status if retry_context.response is not None else 'Unknown' + timestamp_and_request_id = self.extract_date_and_request_id(retry_context) + + logger.info("%s Operation failed: checking if the operation should be retried. " + "Current retry count=%s, %s, HTTP status code=%s, Exception=%s.", + client_request_id_prefix, + retry_context.count if hasattr(retry_context, 'count') else 0, + timestamp_and_request_id, + status_code, + exception_str_in_one_line) + + # Decryption failures (invalid objects, invalid algorithms, data unencrypted in strict mode, etc) + # will not be resolved with retries. + if str(ex) == _ERROR_DECRYPTION_FAILURE: + logger.error("%s Encountered decryption failure: this cannot be retried. " + "%s, HTTP status code=%s, Exception=%s.", + client_request_id_prefix, + timestamp_and_request_id, + status_code, + exception_str_in_one_line) + raise ex + + # Determine whether a retry should be performed and if so, how + # long to wait before performing retry. + retry_interval = self.retry(retry_context) + if retry_interval is not None: + # Execute the callback + if self.retry_callback: + self.retry_callback(retry_context) + + logger.info( + "%s Retry policy is allowing a retry: Retry count=%s, Interval=%s.", + client_request_id_prefix, + retry_context.count, + retry_interval) + + # Sleep for the desired retry interval + sleep(retry_interval) + else: + logger.error("%s Retry policy did not allow for a retry: " + "%s, HTTP status code=%s, Exception=%s.", + client_request_id_prefix, + timestamp_and_request_id, + status_code, + exception_str_in_one_line) + raise ex + finally: + # If this is a location locked operation and the location is not set, + # this is the first request of that operation. Set the location to + # be used for subsequent requests in the operation. + if operation_context.location_lock and not operation_context.host_location: + # note: to cover the emulator scenario, the host_location is grabbed + # from request.host_locations(which includes the dev account name) + # instead of request.host(which at this point no longer includes the dev account name) + operation_context.host_location = {retry_context.location_mode: request.host_locations[retry_context.location_mode]} diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/tokencredential.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/tokencredential.py new file mode 100644 index 00000000000..725badcb33b --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/common/tokencredential.py @@ -0,0 +1,33 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + + +class TokenCredential(object): + """ + Represents a token that is used to authorize HTTPS requests. + The token can be updated by the user. + + :ivar str token: + The authorization token. It can be set by the user at any point in a thread-safe way. + """ + + def __init__(self, initial_value): + """ + :param initial_value: initial value for the token. + """ + self.token = initial_value + + def update_token(self, new_value): + """ + :param new_value: new value to be set as the token. + """ + self.token = new_value + + def get_token(self): + """ + :return: current token value. + """ + return self.token diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/__init__.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/__init__.py new file mode 100644 index 00000000000..464a949d4e4 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/__init__.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. +# -------------------------------------------------------------------------- +from .fileservice import FileService +from .models import ( + Share, + ShareProperties, + File, + FileProperties, + Directory, + DirectoryProperties, + FileRange, + ContentSettings, + CopyProperties, + SharePermissions, + FilePermissions, + DeleteSnapshot, +) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_constants.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_constants.py new file mode 100644 index 00000000000..51dfcab8dcf --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_constants.py @@ -0,0 +1,11 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +__author__ = 'Microsoft Corp. ' +__version__ = '1.1.0' + +# x-ms-version for storage service. +X_MS_VERSION = '2017-07-29' diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_deserialization.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_deserialization.py new file mode 100644 index 00000000000..e1e4ec40ff0 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_deserialization.py @@ -0,0 +1,241 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from dateutil import parser + +try: + from xml.etree import cElementTree as ETree +except ImportError: + from xml.etree import ElementTree as ETree +from .models import ( + Share, + Directory, + File, + FileProperties, + FileRange, + ShareProperties, + DirectoryProperties, +) +from ..common.models import ( + _list, +) +from ..common._deserialization import ( + _parse_properties, + _parse_metadata, +) +from ..common._error import _validate_content_match +from ..common._common_conversion import ( + _get_content_md5, + _to_str, +) + +def _parse_snapshot_share(response, name): + ''' + Extracts snapshot return header. + ''' + snapshot = response.headers.get('x-ms-snapshot') + + return _parse_share(response, name, snapshot) + +def _parse_share(response, name, snapshot=None): + if response is None: + return None + + metadata = _parse_metadata(response) + props = _parse_properties(response, ShareProperties) + return Share(name, props, metadata, snapshot) + + +def _parse_directory(response, name): + if response is None: + return None + + metadata = _parse_metadata(response) + props = _parse_properties(response, DirectoryProperties) + return Directory(name, props, metadata) + + +def _parse_file(response, name, validate_content=False): + if response is None: + return None + + metadata = _parse_metadata(response) + props = _parse_properties(response, FileProperties) + + # For range gets, only look at 'x-ms-content-md5' for overall MD5 + content_settings = getattr(props, 'content_settings') + if 'content-range' in response.headers: + if 'x-ms-content-md5' in response.headers: + setattr(content_settings, 'content_md5', _to_str(response.headers['x-ms-content-md5'])) + else: + delattr(content_settings, 'content_md5') + + if validate_content: + computed_md5 = _get_content_md5(response.body) + _validate_content_match(response.headers['content-md5'], computed_md5) + + return File(name, response.body, props, metadata) + + +def _convert_xml_to_shares(response): + ''' + + + string-value + string-value + int-value + + + share-name + date-time-value + + date/time-value + etag + max-share-size + + + value + + + + marker-value + + ''' + if response is None or response.body is None: + return None + + shares = _list() + list_element = ETree.fromstring(response.body) + + # Set next marker + next_marker = list_element.findtext('NextMarker') or None + setattr(shares, 'next_marker', next_marker) + + shares_element = list_element.find('Shares') + + for share_element in shares_element.findall('Share'): + # Name element + share = Share() + share.name = share_element.findtext('Name') + + # Snapshot + share.snapshot = share_element.findtext('Snapshot') + + # Metadata + metadata_root_element = share_element.find('Metadata') + if metadata_root_element is not None: + share.metadata = dict() + for metadata_element in metadata_root_element: + share.metadata[metadata_element.tag] = metadata_element.text + + # Properties + properties_element = share_element.find('Properties') + share.properties.last_modified = parser.parse(properties_element.findtext('Last-Modified')) + share.properties.etag = properties_element.findtext('Etag') + share.properties.quota = int(properties_element.findtext('Quota')) + + # Add share to list + shares.append(share) + + return shares + + +def _convert_xml_to_directories_and_files(response): + ''' + + + string-value + int-value + + + file-name + + size-in-bytes + + + + directory-name + + + + + ''' + if response is None or response.body is None: + return None + + entries = _list() + list_element = ETree.fromstring(response.body) + + # Set next marker + next_marker = list_element.findtext('NextMarker') or None + setattr(entries, 'next_marker', next_marker) + + entries_element = list_element.find('Entries') + + for file_element in entries_element.findall('File'): + # Name element + file = File() + file.name = file_element.findtext('Name') + + # Properties + properties_element = file_element.find('Properties') + file.properties.content_length = int(properties_element.findtext('Content-Length')) + + # Add file to list + entries.append(file) + + for directory_element in entries_element.findall('Directory'): + # Name element + directory = Directory() + directory.name = directory_element.findtext('Name') + + # Add directory to list + entries.append(directory) + + return entries + + +def _convert_xml_to_ranges(response): + ''' + + + + Start Byte + End Byte + + + Start Byte + End Byte + + + ''' + if response is None or response.body is None: + return None + + ranges = list() + ranges_element = ETree.fromstring(response.body) + + for range_element in ranges_element.findall('Range'): + # Parse range + range = FileRange(int(range_element.findtext('Start')), int(range_element.findtext('End'))) + + # Add range to list + ranges.append(range) + + return ranges + + +def _convert_xml_to_share_stats(response): + ''' + + + 15 + + ''' + if response is None or response.body is None: + return None + + share_stats_element = ETree.fromstring(response.body) + return int(share_stats_element.findtext('ShareUsage')) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_download_chunking.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_download_chunking.py new file mode 100644 index 00000000000..5eb2bdb461b --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_download_chunking.py @@ -0,0 +1,107 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import threading + +from ..common._error import _ERROR_NO_SINGLE_THREAD_CHUNKING + + +def _download_file_chunks(file_service, share_name, directory_name, file_name, + download_size, block_size, progress, start_range, end_range, + stream, max_connections, progress_callback, validate_content, + timeout, operation_context, snapshot): + if max_connections <= 1: + raise ValueError(_ERROR_NO_SINGLE_THREAD_CHUNKING.format('file')) + + downloader = _FileChunkDownloader( + file_service, + share_name, + directory_name, + file_name, + download_size, + block_size, + progress, + start_range, + end_range, + stream, + progress_callback, + validate_content, + timeout, + operation_context, + snapshot, + ) + + import concurrent.futures + executor = concurrent.futures.ThreadPoolExecutor(max_connections) + result = list(executor.map(downloader.process_chunk, downloader.get_chunk_offsets())) + + +class _FileChunkDownloader(object): + def __init__(self, file_service, share_name, directory_name, file_name, + download_size, chunk_size, progress, start_range, end_range, + stream, progress_callback, validate_content, timeout, operation_context, snapshot): + self.file_service = file_service + self.share_name = share_name + self.directory_name = directory_name + self.file_name = file_name + self.chunk_size = chunk_size + + self.download_size = download_size + self.start_index = start_range + self.file_end = end_range + + self.stream = stream + self.stream_start = stream.tell() + self.stream_lock = threading.Lock() + self.progress_callback = progress_callback + self.progress_total = progress + self.progress_lock = threading.Lock() + self.validate_content = validate_content + self.timeout = timeout + self.operation_context = operation_context + self.snapshot = snapshot + + def get_chunk_offsets(self): + index = self.start_index + while index < self.file_end: + yield index + index += self.chunk_size + + def process_chunk(self, chunk_start): + if chunk_start + self.chunk_size > self.file_end: + chunk_end = self.file_end + else: + chunk_end = chunk_start + self.chunk_size + + chunk_data = self._download_chunk(chunk_start, chunk_end).content + length = chunk_end - chunk_start + if length > 0: + self._write_to_stream(chunk_data, chunk_start) + self._update_progress(length) + + def _update_progress(self, length): + if self.progress_callback is not None: + with self.progress_lock: + self.progress_total += length + total = self.progress_total + self.progress_callback(total, self.download_size) + + def _write_to_stream(self, chunk_data, chunk_start): + with self.stream_lock: + self.stream.seek(self.stream_start + (chunk_start - self.start_index)) + self.stream.write(chunk_data) + + def _download_chunk(self, chunk_start, chunk_end): + return self.file_service._get_file( + self.share_name, + self.directory_name, + self.file_name, + start_range=chunk_start, + end_range=chunk_end - 1, + validate_content=self.validate_content, + timeout=self.timeout, + _context=self.operation_context, + snapshot=self.snapshot + ) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_serialization.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_serialization.py new file mode 100644 index 00000000000..03aecd12ee5 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_serialization.py @@ -0,0 +1,66 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from ..common._common_conversion import _str +from ..common._error import ( + _validate_not_none, + _ERROR_START_END_NEEDED_FOR_MD5, + _ERROR_RANGE_TOO_LARGE_FOR_MD5, +) + + +def _get_path(share_name=None, directory_name=None, file_name=None): + ''' + Creates the path to access a file resource. + + share_name: + Name of share. + directory_name: + The path to the directory. + file_name: + Name of file. + ''' + if share_name and directory_name and file_name: + return '/{0}/{1}/{2}'.format( + _str(share_name), + _str(directory_name), + _str(file_name)) + elif share_name and directory_name: + return '/{0}/{1}'.format( + _str(share_name), + _str(directory_name)) + elif share_name and file_name: + return '/{0}/{1}'.format( + _str(share_name), + _str(file_name)) + elif share_name: + return '/{0}'.format(_str(share_name)) + else: + return '/' + + +def _validate_and_format_range_headers(request, start_range, end_range, start_range_required=True, + end_range_required=True, check_content_md5=False): + # If end range is provided, start range must be provided + if start_range_required or end_range is not None: + _validate_not_none('start_range', start_range) + if end_range_required: + _validate_not_none('end_range', end_range) + + # Format based on whether end_range is present + request.headers = request.headers or {} + if end_range is not None: + request.headers['x-ms-range'] = 'bytes={0}-{1}'.format(start_range, end_range) + elif start_range is not None: + request.headers['x-ms-range'] = 'bytes={0}-'.format(start_range) + + # Content MD5 can only be provided for a complete range less than 4MB in size + if check_content_md5: + if start_range is None or end_range is None: + raise ValueError(_ERROR_START_END_NEEDED_FOR_MD5) + if end_range - start_range > 4 * 1024 * 1024: + raise ValueError(_ERROR_RANGE_TOO_LARGE_FOR_MD5) + + request.headers['x-ms-range-get-content-md5'] = 'true' diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_upload_chunking.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_upload_chunking.py new file mode 100644 index 00000000000..c6fb34f77bf --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/_upload_chunking.py @@ -0,0 +1,133 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import threading + + +def _upload_file_chunks(file_service, share_name, directory_name, file_name, + file_size, block_size, stream, max_connections, + progress_callback, validate_content, timeout): + uploader = _FileChunkUploader( + file_service, + share_name, + directory_name, + file_name, + file_size, + block_size, + stream, + max_connections > 1, + progress_callback, + validate_content, + timeout + ) + + if progress_callback is not None: + progress_callback(0, file_size) + + if max_connections > 1: + import concurrent.futures + executor = concurrent.futures.ThreadPoolExecutor(max_connections) + range_ids = list(executor.map(uploader.process_chunk, uploader.get_chunk_offsets())) + else: + if file_size is not None: + range_ids = [uploader.process_chunk(start) for start in uploader.get_chunk_offsets()] + else: + range_ids = uploader.process_all_unknown_size() + + return range_ids + + +class _FileChunkUploader(object): + def __init__(self, file_service, share_name, directory_name, file_name, + file_size, chunk_size, stream, parallel, progress_callback, + validate_content, timeout): + self.file_service = file_service + self.share_name = share_name + self.directory_name = directory_name + self.file_name = file_name + self.file_size = file_size + self.chunk_size = chunk_size + self.stream = stream + self.stream_start = stream.tell() if parallel else None + self.stream_lock = threading.Lock() if parallel else None + self.progress_callback = progress_callback + self.progress_total = 0 + self.progress_lock = threading.Lock() if parallel else None + self.validate_content = validate_content + self.timeout = timeout + + def get_chunk_offsets(self): + index = 0 + if self.file_size is None: + # we don't know the size of the stream, so we have no + # choice but to seek + while True: + data = self._read_from_stream(index, 1) + if not data: + break + yield index + index += self.chunk_size + else: + while index < self.file_size: + yield index + index += self.chunk_size + + def process_chunk(self, chunk_offset): + size = self.chunk_size + if self.file_size is not None: + size = min(size, self.file_size - chunk_offset) + chunk_data = self._read_from_stream(chunk_offset, size) + return self._upload_chunk_with_progress(chunk_offset, chunk_data) + + def process_all_unknown_size(self): + assert self.stream_lock is None + range_ids = [] + index = 0 + while True: + data = self._read_from_stream(None, self.chunk_size) + if data: + index += len(data) + range_id = self._upload_chunk_with_progress(index, data) + range_ids.append(range_id) + else: + break + + return range_ids + + def _read_from_stream(self, offset, count): + if self.stream_lock is not None: + with self.stream_lock: + self.stream.seek(self.stream_start + offset) + data = self.stream.read(count) + else: + data = self.stream.read(count) + return data + + def _update_progress(self, length): + if self.progress_callback is not None: + if self.progress_lock is not None: + with self.progress_lock: + self.progress_total += length + total = self.progress_total + else: + self.progress_total += length + total = self.progress_total + self.progress_callback(total, self.file_size) + + def _upload_chunk_with_progress(self, chunk_start, chunk_data): + chunk_end = chunk_start + len(chunk_data) - 1 + self.file_service.update_range( + self.share_name, + self.directory_name, + self.file_name, + chunk_data, + chunk_start, + chunk_end, + self.validate_content, + timeout=self.timeout + ) + range_id = 'bytes={0}-{1}'.format(chunk_start, chunk_end) + self._update_progress(len(chunk_data)) + return range_id diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/fileservice.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/fileservice.py new file mode 100644 index 00000000000..4872e107804 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/fileservice.py @@ -0,0 +1,2468 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys +from os import path + +from azure.common import AzureHttpError + +from ..common._auth import ( + _StorageSharedKeyAuthentication, + _StorageSASAuthentication, +) +from ..common._common_conversion import ( + _int_to_str, + _to_str, + _get_content_md5, +) +from ..common._connection import _ServiceParameters +from ..common._constants import ( + SERVICE_HOST_BASE, + DEFAULT_PROTOCOL, + DEV_ACCOUNT_NAME, +) +from ..common._deserialization import ( + _convert_xml_to_service_properties, + _convert_xml_to_signed_identifiers, + _parse_metadata, + _parse_properties, + _parse_length_from_content_range, +) +from ..common._error import ( + _dont_fail_not_exist, + _dont_fail_on_exist, + _validate_not_none, + _validate_type_bytes, + _ERROR_VALUE_NEGATIVE, + _ERROR_STORAGE_MISSING_INFO, + _ERROR_EMULATOR_DOES_NOT_SUPPORT_FILES, + _ERROR_PARALLEL_NOT_SEEKABLE, + _validate_access_policies, +) +from ..common._http import HTTPRequest +from ..common._serialization import ( + _get_request_body, + _get_data_bytes_only, + _convert_signed_identifiers_to_xml, + _convert_service_properties_to_xml, + _add_metadata_headers, +) +from ..common.models import ( + Services, + ListGenerator, + _OperationContext, +) +from .sharedaccesssignature import ( + FileSharedAccessSignature, +) +from ..common.storageclient import StorageClient +from ._deserialization import ( + _convert_xml_to_shares, + _convert_xml_to_directories_and_files, + _convert_xml_to_ranges, + _convert_xml_to_share_stats, + _parse_file, + _parse_share, + _parse_snapshot_share, + _parse_directory, +) +from ._download_chunking import _download_file_chunks +from ._serialization import ( + _get_path, + _validate_and_format_range_headers, +) +from ._upload_chunking import _upload_file_chunks +from .models import ( + FileProperties, +) + +from ._constants import ( + X_MS_VERSION, + __version__ as package_version, +) + +if sys.version_info >= (3,): + from io import BytesIO +else: + from cStringIO import StringIO as BytesIO + + +class FileService(StorageClient): + ''' + The Server Message Block (SMB) protocol is the preferred file share protocol + used on premise today. The Microsoft Azure File service enables customers to + leverage the availability and scalability of Azure's Cloud Infrastructure as + a Service (IaaS) SMB without having to rewrite SMB client applications. + + The Azure File service also offers a compelling alternative to traditional + Direct Attached Storage (DAS) and Storage Area Network (SAN) solutions, which + are often complex and expensive to install, configure, and operate. + + :ivar int MAX_SINGLE_GET_SIZE: + The size of the first range get performed by get_file_to_* methods if + max_connections is greater than 1. Less data will be returned if the + file is smaller than this. + :ivar int MAX_CHUNK_GET_SIZE: + The size of subsequent range gets performed by get_file_to_* methods if + max_connections is greater than 1 and the file is larger than MAX_SINGLE_GET_SIZE. + Less data will be returned if the remainder of the file is smaller than + this. If this is set to larger than 4MB, content_validation will throw an + error if enabled. However, if content_validation is not desired a size + greater than 4MB may be optimal. Setting this below 4MB is not recommended. + :ivar int MAX_RANGE_SIZE: + The size of the ranges put by create_file_from_* methods. Smaller ranges + may be put if there is less data provided. The maximum range size the service + supports is 4MB. + ''' + MAX_SINGLE_GET_SIZE = 32 * 1024 * 1024 + MAX_CHUNK_GET_SIZE = 8 * 1024 * 1024 + MAX_RANGE_SIZE = 4 * 1024 * 1024 + + def __init__(self, account_name=None, account_key=None, sas_token=None, + protocol=DEFAULT_PROTOCOL, endpoint_suffix=SERVICE_HOST_BASE, + request_session=None, connection_string=None, socket_timeout=None): + ''' + :param str account_name: + The storage account name. This is used to authenticate requests + signed with an account key and to construct the storage endpoint. It + is required unless a connection string is given. + :param str account_key: + The storage account key. This is used for shared key authentication. + :param str sas_token: + A shared access signature token to use to authenticate requests + instead of the account key. If account key and sas token are both + specified, account key will be used to sign. + :param str protocol: + The protocol to use for requests. Defaults to https. + :param str endpoint_suffix: + The host base component of the url, minus the account name. Defaults + to Azure (core.windows.net). Override this to use the China cloud + (core.chinacloudapi.cn). + :param requests.Session request_session: + The session object to use for http requests. + :param str connection_string: + If specified, this will override all other parameters besides + request session. See + http://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/ + for the connection string format. + :param int socket_timeout: + If specified, this will override the default socket timeout. The timeout specified is in seconds. + See DEFAULT_SOCKET_TIMEOUT in _constants.py for the default value. + ''' + service_params = _ServiceParameters.get_service_parameters( + 'file', + account_name=account_name, + account_key=account_key, + sas_token=sas_token, + protocol=protocol, + endpoint_suffix=endpoint_suffix, + request_session=request_session, + connection_string=connection_string, + socket_timeout=socket_timeout) + + super(FileService, self).__init__(service_params) + + if self.account_name == DEV_ACCOUNT_NAME: + raise ValueError(_ERROR_EMULATOR_DOES_NOT_SUPPORT_FILES) + + if self.account_key: + self.authentication = _StorageSharedKeyAuthentication( + self.account_name, + self.account_key, + ) + elif self.sas_token: + self.authentication = _StorageSASAuthentication(self.sas_token) + else: + raise ValueError(_ERROR_STORAGE_MISSING_INFO) + self._X_MS_VERSION = X_MS_VERSION + self._update_user_agent_string(package_version) + + def make_file_url(self, share_name, directory_name, file_name, + protocol=None, sas_token=None): + ''' + Creates the url to access a file. + + :param str share_name: + Name of share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of file. + :param str protocol: + Protocol to use: 'http' or 'https'. If not specified, uses the + protocol specified when FileService was initialized. + :param str sas_token: + Shared access signature token created with + generate_shared_access_signature. + :return: file access URL. + :rtype: str + ''' + + if directory_name is None: + url = '{}://{}/{}/{}'.format( + protocol or self.protocol, + self.primary_endpoint, + share_name, + file_name, + ) + else: + url = '{}://{}/{}/{}/{}'.format( + protocol or self.protocol, + self.primary_endpoint, + share_name, + directory_name, + file_name, + ) + + if sas_token: + url += '?' + sas_token + + return url + + def generate_account_shared_access_signature(self, resource_types, permission, + expiry, start=None, ip=None, protocol=None): + ''' + Generates a shared access signature for the file service. + Use the returned signature with the sas_token parameter of the FileService. + + :param ResourceTypes resource_types: + Specifies the resource types that are accessible with the account SAS. + :param AccountPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. Possible values are + both HTTPS and HTTP (https,http) or HTTPS only (https). The default value + is https,http. Note that HTTP only is not a permitted value. + :return: A Shared Access Signature (sas) token. + :rtype: str + ''' + _validate_not_none('self.account_name', self.account_name) + _validate_not_none('self.account_key', self.account_key) + + sas = FileSharedAccessSignature(self.account_name, self.account_key) + return sas.generate_account(Services.FILE, resource_types, permission, + expiry, start=start, ip=ip, protocol=protocol) + + def generate_share_shared_access_signature(self, share_name, + permission=None, + expiry=None, + start=None, + id=None, + ip=None, + protocol=None, + cache_control=None, + content_disposition=None, + content_encoding=None, + content_language=None, + content_type=None): + ''' + Generates a shared access signature for the share. + Use the returned signature with the sas_token parameter of FileService. + + :param str share_name: + Name of share. + :param SharePermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, create, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use :func:`~set_share_acl`. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. Possible values are + both HTTPS and HTTP (https,http) or HTTPS only (https). The default value + is https,http. Note that HTTP only is not a permitted value. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + :return: A Shared Access Signature (sas) token. + :rtype: str + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('self.account_name', self.account_name) + _validate_not_none('self.account_key', self.account_key) + + sas = FileSharedAccessSignature(self.account_name, self.account_key) + return sas.generate_share( + share_name, + permission, + expiry, + start=start, + id=id, + ip=ip, + protocol=protocol, + cache_control=cache_control, + content_disposition=content_disposition, + content_encoding=content_encoding, + content_language=content_language, + content_type=content_type, + ) + + def generate_file_shared_access_signature(self, share_name, + directory_name=None, + file_name=None, + permission=None, + expiry=None, + start=None, + id=None, + ip=None, + protocol=None, + cache_control=None, + content_disposition=None, + content_encoding=None, + content_language=None, + content_type=None): + ''' + Generates a shared access signature for the file. + Use the returned signature with the sas_token parameter of FileService. + + :param str share_name: + Name of share. + :param str directory_name: + Name of directory. SAS tokens cannot be created for directories, so + this parameter should only be present if file_name is provided. + :param str file_name: + Name of file. + :param FilePermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, create, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use + set_file_service_properties. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. Possible values are + both HTTPS and HTTP (https,http) or HTTPS only (https). The default value + is https,http. Note that HTTP only is not a permitted value. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + :return: A Shared Access Signature (sas) token. + :rtype: str + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('self.account_name', self.account_name) + _validate_not_none('self.account_key', self.account_key) + + sas = FileSharedAccessSignature(self.account_name, self.account_key) + return sas.generate_file( + share_name, + directory_name, + file_name, + permission, + expiry, + start=start, + id=id, + ip=ip, + protocol=protocol, + cache_control=cache_control, + content_disposition=content_disposition, + content_encoding=content_encoding, + content_language=content_language, + content_type=content_type, + ) + + def set_file_service_properties(self, hour_metrics=None, minute_metrics=None, + cors=None, timeout=None): + ''' + Sets the properties of a storage account's File service, including + Azure Storage Analytics. If an element (ex HourMetrics) is left as None, the + existing settings on the service for that functionality are preserved. + + :param Metrics hour_metrics: + The hour metrics settings provide a summary of request + statistics grouped by API in hourly aggregates for files. + :param Metrics minute_metrics: + The minute metrics settings provide request statistics + for each minute for files. + :param cors: + You can include up to five CorsRule elements in the + list. If an empty list is specified, all CORS rules will be deleted, + and CORS will be disabled for the service. + :type cors: list(:class:`~..common.models.CorsRule`) + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path() + request.query = { + 'restype': 'service', + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + request.body = _get_request_body( + _convert_service_properties_to_xml(None, hour_metrics, minute_metrics, cors)) + + self._perform_request(request) + + def get_file_service_properties(self, timeout=None): + ''' + Gets the properties of a storage account's File service, including + Azure Storage Analytics. + + :param int timeout: + The timeout parameter is expressed in seconds. + :return: The file service properties. + :rtype: + :class:`~..common.models.ServiceProperties` + ''' + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path() + request.query = { + 'restype': 'service', + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_service_properties) + + def list_shares(self, prefix=None, marker=None, num_results=None, + include_metadata=False, timeout=None, include_snapshots=False): + ''' + Returns a generator to list the shares under the specified account. + The generator will lazily follow the continuation tokens returned by + the service and stop when all shares have been returned or num_results + is reached. + + If num_results is specified and the account has more than that number of + shares, the generator will have a populated next_marker field once it + finishes. This marker can be used to create a new generator if more + results are desired. + + :param str prefix: + Filters the results to return only shares whose names + begin with the specified prefix. + :param int num_results: + Specifies the maximum number of shares to return. + :param bool include_metadata: + Specifies that share metadata be returned in the response. + :param str marker: + An opaque continuation token. This value can be retrieved from the + next_marker field of a previous generator object if num_results was + specified and that generator has finished enumerating results. If + specified, this generator will begin returning results from the point + where the previous generator stopped. + :param int timeout: + The timeout parameter is expressed in seconds. + :param bool include_snapshots: + Specifies that share snapshots be returned in the response. + ''' + include = 'snapshots' if include_snapshots else None + if include_metadata: + if include is not None: + include = include + ',metadata' + else: + include = 'metadata' + operation_context = _OperationContext(location_lock=True) + kwargs = {'prefix': prefix, 'marker': marker, 'max_results': num_results, + 'include': include, 'timeout': timeout, '_context': operation_context} + resp = self._list_shares(**kwargs) + + return ListGenerator(resp, self._list_shares, (), kwargs) + + def _list_shares(self, prefix=None, marker=None, max_results=None, + include=None, timeout=None, _context=None): + ''' + Returns a list of the shares under the specified account. + + :param str prefix: + Filters the results to return only shares whose names + begin with the specified prefix. + :param str marker: + A string value that identifies the portion of the list + to be returned with the next list operation. The operation returns + a next_marker value within the response body if the list returned was + not complete. The marker value may then be used in a subsequent + call to request the next set of list items. The marker value is + opaque to the client. + :param int max_results: + Specifies the maximum number of shares to return. A single list + request may return up to 1000 shares and potentially a continuation + token which should be followed to get additional resutls. + :param string include: + Include this parameter to specify that either the share's + metadata, snapshots or both be returned as part of the response body. set this + parameter to string 'metadata' to get share's metadata. set this parameter to 'snapshots' + to get all the share snapshots. for both use 'snapshots,metadata'. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path() + request.query = { + 'comp': 'list', + 'prefix': _to_str(prefix), + 'marker': _to_str(marker), + 'maxresults': _int_to_str(max_results), + 'include': _to_str(include), + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_shares, operation_context=_context) + + def create_share(self, share_name, metadata=None, quota=None, + fail_on_exist=False, timeout=None): + ''' + Creates a new share under the specified account. If the share + with the same name already exists, the operation fails on the + service. By default, the exception is swallowed by the client. + To expose the exception, specify True for fail_on_exists. + + :param str share_name: + Name of share to create. + :param metadata: + A dict with name_value pairs to associate with the + share as metadata. Example:{'Category':'test'} + :type metadata: dict(str, str) + :param int quota: + Specifies the maximum size of the share, in gigabytes. Must be + greater than 0, and less than or equal to 5TB (5120). + :param bool fail_on_exist: + Specify whether to throw an exception when the share exists. + False by default. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: True if share is created, False if share already exists. + :rtype: bool + ''' + _validate_not_none('share_name', share_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.query = { + 'restype': 'share', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-share-quota': _int_to_str(quota) + } + _add_metadata_headers(metadata, request) + + if not fail_on_exist: + try: + self._perform_request(request) + return True + except AzureHttpError as ex: + _dont_fail_on_exist(ex) + return False + else: + self._perform_request(request) + return True + + def snapshot_share(self, share_name, metadata=None, quota=None, timeout=None): + ''' + Creates a snapshot of an existing share under the specified account. + + :param str share_name: + The name of the share to create a snapshot of. + :param metadata: + A dict with name_value pairs to associate with the + share as metadata. Example:{'Category':'test'} + :type metadata: a dict of str to str: + :param int quota: + Specifies the maximum size of the share, in gigabytes. Must be + greater than 0, and less than or equal to 5TB (5120). + :param int timeout: + The timeout parameter is expressed in seconds. + :return: snapshot properties + :rtype: azure.storage.file.models.Share + ''' + _validate_not_none('share_name', share_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.query = { + 'restype': 'share', + 'comp': 'snapshot', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-share-quota': _int_to_str(quota) + } + _add_metadata_headers(metadata, request) + + return self._perform_request(request, _parse_snapshot_share, [share_name]) + + def get_share_properties(self, share_name, timeout=None, snapshot=None): + ''' + Returns all user-defined metadata and system properties for the + specified share. The data returned does not include the shares's + list of files or directories. + + :param str share_name: + Name of existing share. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: A Share that exposes properties and metadata. + :rtype: :class:`~azure.storage.file.models.Share` + ''' + _validate_not_none('share_name', share_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.query = { + 'restype': 'share', + 'timeout': _int_to_str(timeout), + 'sharesnapshot': _to_str(snapshot) + } + + return self._perform_request(request, _parse_share, [share_name]) + + def set_share_properties(self, share_name, quota, timeout=None): + ''' + Sets service-defined properties for the specified share. + + :param str share_name: + Name of existing share. + :param int quota: + Specifies the maximum size of the share, in gigabytes. Must be + greater than 0, and less than or equal to 5 TB (5120 GB). + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('quota', quota) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.query = { + 'restype': 'share', + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-share-quota': _int_to_str(quota) + } + + self._perform_request(request) + + def get_share_metadata(self, share_name, timeout=None, snapshot=None): + ''' + Returns all user-defined metadata for the specified share. + + :param str share_name: + Name of existing share. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: + A dictionary representing the share metadata name, value pairs. + :rtype: dict(str, str) + ''' + _validate_not_none('share_name', share_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.query = { + 'restype': 'share', + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + 'sharesnapshot': _to_str(snapshot), + } + + return self._perform_request(request, _parse_metadata) + + def set_share_metadata(self, share_name, metadata=None, timeout=None): + ''' + Sets one or more user-defined name-value pairs for the specified + share. Each call to this operation replaces all existing metadata + attached to the share. To remove all metadata from the share, + call this operation with no metadata dict. + + :param str share_name: + Name of existing share. + :param metadata: + A dict containing name-value pairs to associate with the share as + metadata. Example: {'category':'test'} + :type metadata: dict(str, str) + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.query = { + 'restype': 'share', + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + } + _add_metadata_headers(metadata, request) + + self._perform_request(request) + + def get_share_acl(self, share_name, timeout=None): + ''' + Gets the permissions for the specified share. + + :param str share_name: + Name of existing share. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: A dictionary of access policies associated with the share. + :rtype: dict(str, :class:`~..common.models.AccessPolicy`) + ''' + _validate_not_none('share_name', share_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.query = { + 'restype': 'share', + 'comp': 'acl', + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_signed_identifiers) + + def set_share_acl(self, share_name, signed_identifiers=None, timeout=None): + ''' + Sets the permissions for the specified share or stored access + policies that may be used with Shared Access Signatures. + + :param str share_name: + Name of existing share. + :param signed_identifiers: + A dictionary of access policies to associate with the share. The + dictionary may contain up to 5 elements. An empty dictionary + will clear the access policies set on the service. + :type signed_identifiers: dict(str, :class:`~..common.models.AccessPolicy`) + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_access_policies(signed_identifiers) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.query = { + 'restype': 'share', + 'comp': 'acl', + 'timeout': _int_to_str(timeout), + } + request.body = _get_request_body( + _convert_signed_identifiers_to_xml(signed_identifiers)) + + self._perform_request(request) + + def get_share_stats(self, share_name, timeout=None): + ''' + Gets the approximate size of the data stored on the share, + rounded up to the nearest gigabyte. + + Note that this value may not include all recently created + or recently resized files. + + :param str share_name: + Name of existing share. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: the approximate size of the data stored on the share. + :rtype: int + ''' + _validate_not_none('share_name', share_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.query = { + 'restype': 'share', + 'comp': 'stats', + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_share_stats) + + def delete_share(self, share_name, fail_not_exist=False, timeout=None, snapshot=None, delete_snapshots=None): + ''' + Marks the specified share for deletion. If the share + does not exist, the operation fails on the service. By + default, the exception is swallowed by the client. + To expose the exception, specify True for fail_not_exist. + + :param str share_name: + Name of share to delete. + :param bool fail_not_exist: + Specify whether to throw an exception when the share doesn't + exist. False by default. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str snapshot: + A string that represents the snapshot version, if applicable. + Specify this argument to delete a specific snapshot only. + delete_snapshots must be None if this is specified. + :param ~azure.storage.file.models.DeleteSnapshot delete_snapshots: + To delete a share that has snapshots, this must be specified as DeleteSnapshot.Include. + :return: True if share is deleted, False share doesn't exist. + :rtype: bool + ''' + _validate_not_none('share_name', share_name) + request = HTTPRequest() + request.method = 'DELETE' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name) + request.headers = { + 'x-ms-delete-snapshots': _to_str(delete_snapshots) + } + request.query = { + 'restype': 'share', + 'timeout': _int_to_str(timeout), + 'sharesnapshot': _to_str(snapshot), + } + + if not fail_not_exist: + try: + self._perform_request(request) + return True + except AzureHttpError as ex: + _dont_fail_not_exist(ex) + return False + else: + self._perform_request(request) + return True + + def create_directory(self, share_name, directory_name, metadata=None, + fail_on_exist=False, timeout=None): + ''' + Creates a new directory under the specified share or parent directory. + If the directory with the same name already exists, the operation fails + on the service. By default, the exception is swallowed by the client. + To expose the exception, specify True for fail_on_exists. + + :param str share_name: + Name of existing share. + :param str directory_name: + Name of directory to create, including the path to the parent + directory. + :param metadata: + A dict with name_value pairs to associate with the + share as metadata. Example:{'Category':'test'} + :type metadata: dict(str, str): + :param bool fail_on_exist: + specify whether to throw an exception when the directory exists. + False by default. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: True if directory is created, False if directory already exists. + :rtype: bool + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('directory_name', directory_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name) + request.query = { + 'restype': 'directory', + 'timeout': _int_to_str(timeout), + } + _add_metadata_headers(metadata, request) + + if not fail_on_exist: + try: + self._perform_request(request) + return True + except AzureHttpError as ex: + _dont_fail_on_exist(ex) + return False + else: + self._perform_request(request) + return True + + def delete_directory(self, share_name, directory_name, + fail_not_exist=False, timeout=None): + ''' + Deletes the specified empty directory. Note that the directory must + be empty before it can be deleted. Attempting to delete directories + that are not empty will fail. + + If the directory does not exist, the operation fails on the + service. By default, the exception is swallowed by the client. + To expose the exception, specify True for fail_not_exist. + + :param str share_name: + Name of existing share. + :param str directory_name: + Name of directory to delete, including the path to the parent + directory. + :param bool fail_not_exist: + Specify whether to throw an exception when the directory doesn't + exist. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: True if directory is deleted, False otherwise. + :rtype: bool + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('directory_name', directory_name) + request = HTTPRequest() + request.method = 'DELETE' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name) + request.query = { + 'restype': 'directory', + 'timeout': _int_to_str(timeout), + } + + if not fail_not_exist: + try: + self._perform_request(request) + return True + except AzureHttpError as ex: + _dont_fail_not_exist(ex) + return False + else: + self._perform_request(request) + return True + + def get_directory_properties(self, share_name, directory_name, timeout=None, snapshot=None): + ''' + Returns all user-defined metadata and system properties for the + specified directory. The data returned does not include the directory's + list of files. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to an existing directory. + :param int timeout: + The timeout parameter is expressed in seconds. + :return: properties for the specified directory within a directory object. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :rtype: :class:`~azure.storage.file.models.Directory` + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('directory_name', directory_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name) + request.query = { + 'restype': 'directory', + 'timeout': _int_to_str(timeout), + 'sharesnapshot': _to_str(snapshot) + } + + return self._perform_request(request, _parse_directory, [directory_name]) + + def get_directory_metadata(self, share_name, directory_name, timeout=None, snapshot=None): + ''' + Returns all user-defined metadata for the specified directory. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: + A dictionary representing the directory metadata name, value pairs. + :rtype: dict(str, str) + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('directory_name', directory_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name) + request.query = { + 'restype': 'directory', + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + 'sharesnapshot': _to_str(snapshot) + } + + return self._perform_request(request, _parse_metadata) + + def set_directory_metadata(self, share_name, directory_name, metadata=None, timeout=None): + ''' + Sets one or more user-defined name-value pairs for the specified + directory. Each call to this operation replaces all existing metadata + attached to the directory. To remove all metadata from the directory, + call this operation with no metadata dict. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param metadata: + A dict containing name-value pairs to associate with the directory + as metadata. Example: {'category':'test'} + :type metadata: dict(str, str). + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('directory_name', directory_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name) + request.query = { + 'restype': 'directory', + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + } + _add_metadata_headers(metadata, request) + + self._perform_request(request) + + def list_directories_and_files(self, share_name, directory_name=None, + num_results=None, marker=None, timeout=None, + prefix=None, snapshot=None): + + ''' + Returns a generator to list the directories and files under the specified share. + The generator will lazily follow the continuation tokens returned by + the service and stop when all directories and files have been returned or + num_results is reached. + + If num_results is specified and the share has more than that number of + files and directories, the generator will have a populated next_marker + field once it finishes. This marker can be used to create a new generator + if more results are desired. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param int num_results: + Specifies the maximum number of files to return, + including all directory elements. If the request does not specify + num_results or specifies a value greater than 5,000, the server will + return up to 5,000 items. Setting num_results to a value less than + or equal to zero results in error response code 400 (Bad Request). + :param str marker: + An opaque continuation token. This value can be retrieved from the + next_marker field of a previous generator object if num_results was + specified and that generator has finished enumerating results. If + specified, this generator will begin returning results from the point + where the previous generator stopped. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str prefix: + List only the files and/or directories with the given prefix. + :param str snapshot: + A string that represents the snapshot version, if applicable. + ''' + operation_context = _OperationContext(location_lock=True) + args = (share_name, directory_name) + kwargs = {'marker': marker, 'max_results': num_results, 'timeout': timeout, + '_context': operation_context, 'prefix': prefix, 'snapshot': snapshot} + + resp = self._list_directories_and_files(*args, **kwargs) + + return ListGenerator(resp, self._list_directories_and_files, args, kwargs) + + def _list_directories_and_files(self, share_name, directory_name=None, + marker=None, max_results=None, timeout=None, + prefix=None, _context=None, snapshot=None): + ''' + Returns a list of the directories and files under the specified share. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str marker: + A string value that identifies the portion of the list + to be returned with the next list operation. The operation returns + a next_marker value within the response body if the list returned was + not complete. The marker value may then be used in a subsequent + call to request the next set of list items. The marker value is + opaque to the client. + :param int max_results: + Specifies the maximum number of files to return, + including all directory elements. If the request does not specify + max_results or specifies a value greater than 5,000, the server will + return up to 5,000 items. Setting max_results to a value less than + or equal to zero results in error response code 400 (Bad Request). + :param int timeout: + The timeout parameter is expressed in seconds. + :param str prefix: + List only the files and/or directories with the given prefix. + :param str snapshot: + A string that represents the snapshot version, if applicable. + ''' + _validate_not_none('share_name', share_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name) + request.query = { + 'restype': 'directory', + 'comp': 'list', + 'prefix': _to_str(prefix), + 'marker': _to_str(marker), + 'maxresults': _int_to_str(max_results), + 'timeout': _int_to_str(timeout), + 'sharesnapshot': _to_str(snapshot) + } + + return self._perform_request(request, _convert_xml_to_directories_and_files, + operation_context=_context) + + def get_file_properties(self, share_name, directory_name, file_name, timeout=None, snapshot=None): + ''' + Returns all user-defined metadata, standard HTTP properties, and + system properties for the file. Returns an instance of :class:`~azure.storage.file.models.File` with + :class:`~azure.storage.file.models.FileProperties` and a metadata dict. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: a file object including properties and metadata. + :rtype: :class:`~azure.storage.file.models.File` + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + request = HTTPRequest() + request.method = 'HEAD' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { 'timeout': _int_to_str(timeout), 'sharesnapshot': _to_str(snapshot)} + + return self._perform_request(request, _parse_file, [file_name]) + + def exists(self, share_name, directory_name=None, file_name=None, timeout=None, snapshot=None): + ''' + Returns a boolean indicating whether the share exists if only share name is + given. If directory_name is specificed a boolean will be returned indicating + if the directory exists. If file_name is specified as well, a boolean will be + returned indicating if the file exists. + + :param str share_name: + Name of a share. + :param str directory_name: + The path to a directory. + :param str file_name: + Name of a file. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: A boolean indicating whether the resource exists. + :rtype: bool + ''' + _validate_not_none('share_name', share_name) + try: + if file_name is not None: + self.get_file_properties(share_name, directory_name, file_name, timeout=timeout, snapshot=snapshot) + elif directory_name is not None: + self.get_directory_properties(share_name, directory_name, timeout=timeout, snapshot=snapshot) + else: + self.get_share_properties(share_name, timeout=timeout, snapshot=snapshot) + return True + except AzureHttpError as ex: + _dont_fail_not_exist(ex) + return False + + def resize_file(self, share_name, directory_name, + file_name, content_length, timeout=None): + ''' + Resizes a file to the specified size. If the specified byte + value is less than the current size of the file, then all + ranges above the specified byte value are cleared. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param int content_length: + The length to resize the file to. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('content_length', content_length) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-content-length': _to_str(content_length) + } + + self._perform_request(request) + + def set_file_properties(self, share_name, directory_name, file_name, + content_settings, timeout=None): + ''' + Sets system properties on the file. If one property is set for the + content_settings, all properties will be overriden. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param ~azure.storage.file.models.ContentSettings content_settings: + ContentSettings object used to set the file properties. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('content_settings', content_settings) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + request.headers = content_settings._to_headers() + + self._perform_request(request) + + def get_file_metadata(self, share_name, directory_name, file_name, timeout=None, snapshot=None): + ''' + Returns all user-defined metadata for the specified file. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: + A dictionary representing the file metadata name, value pairs. + :rtype: dict(str, str) + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + 'sharesnapshot': _to_str(snapshot), + } + + return self._perform_request(request, _parse_metadata) + + def set_file_metadata(self, share_name, directory_name, + file_name, metadata=None, timeout=None): + ''' + Sets user-defined metadata for the specified file as one or more + name-value pairs. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param metadata: + Dict containing name and value pairs. Each call to this operation + replaces all existing metadata attached to the file. To remove all + metadata from the file, call this operation with no metadata headers. + :type metadata: dict(str, str) + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + } + _add_metadata_headers(metadata, request) + + self._perform_request(request) + + def copy_file(self, share_name, directory_name, file_name, copy_source, + metadata=None, timeout=None): + ''' + Copies a file asynchronously. This operation returns a copy operation + properties object, including a copy ID you can use to check or abort the + copy operation. The File service copies files on a best-effort basis. + + If the destination file exists, it will be overwritten. The destination + file cannot be modified while the copy operation is in progress. + + :param str share_name: + Name of the destination share. The share must exist. + :param str directory_name: + Name of the destination directory. The directory must exist. + :param str file_name: + Name of the destination file. If the destination file exists, it will + be overwritten. Otherwise, it will be created. + :param str copy_source: + A URL of up to 2 KB in length that specifies an Azure file or blob. + The value should be URL-encoded as it would appear in a request URI. + If the source is in another account, the source must either be public + or must be authenticated via a shared access signature. If the source + is public, no authentication is required. + Examples: + https://myaccount.file.core.windows.net/myshare/mydir/myfile + https://otheraccount.file.core.windows.net/myshare/mydir/myfile?sastoken + :param metadata: + Name-value pairs associated with the file as metadata. If no name-value + pairs are specified, the operation will copy the metadata from the + source blob or file to the destination file. If one or more name-value + pairs are specified, the destination file is created with the specified + metadata, and the metadata is not copied from the source blob or file. + :type metadata: dict(str, str). + :param int timeout: + The timeout parameter is expressed in seconds. + :return: Copy operation properties such as status, source, and ID. + :rtype: :class:`~azure.storage.file.models.CopyProperties` + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('copy_source', copy_source) + + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = {'timeout': _int_to_str(timeout)} + request.headers = { + 'x-ms-copy-source': _to_str(copy_source), + } + _add_metadata_headers(metadata, request) + + return self._perform_request(request, _parse_properties, [FileProperties]).copy + + def abort_copy_file(self, share_name, directory_name, file_name, copy_id, timeout=None): + ''' + Aborts a pending copy_file operation, and leaves a destination file + with zero length and full metadata. + + :param str share_name: + Name of destination share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of destination file. + :param str copy_id: + Copy identifier provided in the copy.id of the original + copy_file operation. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('copy_id', copy_id) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { + 'comp': 'copy', + 'copyid': _to_str(copy_id), + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-copy-action': 'abort', + } + + self._perform_request(request) + + def delete_file(self, share_name, directory_name, file_name, timeout=None): + ''' + Marks the specified file for deletion. The file is later + deleted during garbage collection. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + request = HTTPRequest() + request.method = 'DELETE' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = {'timeout': _int_to_str(timeout)} + + self._perform_request(request) + + def create_file(self, share_name, directory_name, file_name, + content_length, content_settings=None, metadata=None, + timeout=None): + ''' + Creates a new file. + + See create_file_from_* for high level functions that handle the + creation and upload of large files with automatic chunking and + progress notifications. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of file to create or update. + :param int content_length: + Length of the file in bytes. + :param ~azure.storage.file.models.ContentSettings content_settings: + ContentSettings object used to set file properties. + :param metadata: + Name-value pairs associated with the file as metadata. + :type metadata: dict(str, str) + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('content_length', content_length) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = {'timeout': _int_to_str(timeout)} + request.headers = { + 'x-ms-content-length': _to_str(content_length), + 'x-ms-type': 'file' + } + _add_metadata_headers(metadata, request) + if content_settings is not None: + request.headers.update(content_settings._to_headers()) + + self._perform_request(request) + + def create_file_from_path(self, share_name, directory_name, file_name, + local_file_path, content_settings=None, + metadata=None, validate_content=False, progress_callback=None, + max_connections=2, timeout=None): + ''' + Creates a new azure file from a local file path, or updates the content of an + existing file, with automatic chunking and progress notifications. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of file to create or update. + :param str local_file_path: + Path of the local file to upload as the file content. + :param ~azure.storage.file.models.ContentSettings content_settings: + ContentSettings object used for setting file properties. + :param metadata: + Name-value pairs associated with the file as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each range of the file. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + file. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far and total is the + size of the file, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('local_file_path', local_file_path) + + count = path.getsize(local_file_path) + with open(local_file_path, 'rb') as stream: + self.create_file_from_stream( + share_name, directory_name, file_name, stream, + count, content_settings, metadata, validate_content, progress_callback, + max_connections, timeout) + + def create_file_from_text(self, share_name, directory_name, file_name, + text, encoding='utf-8', content_settings=None, + metadata=None, validate_content=False, timeout=None): + ''' + Creates a new file from str/unicode, or updates the content of an + existing file, with automatic chunking and progress notifications. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of file to create or update. + :param str text: + Text to upload to the file. + :param str encoding: + Python encoding to use to convert the text to bytes. + :param ~azure.storage.file.models.ContentSettings content_settings: + ContentSettings object used to set file properties. + :param metadata: + Name-value pairs associated with the file as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each range of the file. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + file. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('text', text) + + if not isinstance(text, bytes): + _validate_not_none('encoding', encoding) + text = text.encode(encoding) + + self.create_file_from_bytes( + share_name, directory_name, file_name, text, count=len(text), + content_settings=content_settings, metadata=metadata, + validate_content=validate_content, timeout=timeout) + + def create_file_from_bytes( + self, share_name, directory_name, file_name, file, + index=0, count=None, content_settings=None, metadata=None, + validate_content=False, progress_callback=None, max_connections=2, + timeout=None): + ''' + Creates a new file from an array of bytes, or updates the content + of an existing file, with automatic chunking and progress + notifications. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of file to create or update. + :param str file: + Content of file as an array of bytes. + :param int index: + Start index in the array of bytes. + :param int count: + Number of bytes to upload. Set to None or negative value to upload + all bytes starting from index. + :param ~azure.storage.file.models.ContentSettings content_settings: + ContentSettings object used to set file properties. + :param metadata: + Name-value pairs associated with the file as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each range of the file. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + file. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far and total is the + size of the file, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('file', file) + _validate_type_bytes('file', file) + + if index < 0: + raise TypeError(_ERROR_VALUE_NEGATIVE.format('index')) + + if count is None or count < 0: + count = len(file) - index + + stream = BytesIO(file) + stream.seek(index) + + self.create_file_from_stream( + share_name, directory_name, file_name, stream, count, + content_settings, metadata, validate_content, progress_callback, + max_connections, timeout) + + def create_file_from_stream( + self, share_name, directory_name, file_name, stream, count, + content_settings=None, metadata=None, validate_content=False, + progress_callback=None, max_connections=2, timeout=None): + ''' + Creates a new file from a file/stream, or updates the content of an + existing file, with automatic chunking and progress notifications. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of file to create or update. + :param io.IOBase stream: + Opened file/stream to upload as the file content. + :param int count: + Number of bytes to read from the stream. This is required, a + file cannot be created if the count is unknown. + :param ~azure.storage.file.models.ContentSettings content_settings: + ContentSettings object used to set file properties. + :param metadata: + Name-value pairs associated with the file as metadata. + :type metadata: dict(str, str) + :param bool validate_content: + If true, calculates an MD5 hash for each range of the file. The storage + service checks the hash of the content that has arrived with the hash + that was sent. This is primarily valuable for detecting bitflips on + the wire if using http instead of https as https (the default) will + already validate. Note that this MD5 hash is not stored with the + file. + :param progress_callback: + Callback for progress with signature function(current, total) where + current is the number of bytes transfered so far and total is the + size of the file, or None if the total size is unknown. + :type progress_callback: func(current, total) + :param int max_connections: + Maximum number of parallel connections to use. Note that parallel upload + requires the stream to be seekable. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('stream', stream) + _validate_not_none('count', count) + + if count < 0: + raise TypeError(_ERROR_VALUE_NEGATIVE.format('count')) + + self.create_file( + share_name, + directory_name, + file_name, + count, + content_settings, + metadata, + timeout + ) + + _upload_file_chunks( + self, + share_name, + directory_name, + file_name, + count, + self.MAX_RANGE_SIZE, + stream, + max_connections, + progress_callback, + validate_content, + timeout + ) + + def _get_file(self, share_name, directory_name, file_name, + start_range=None, end_range=None, validate_content=False, + timeout=None, _context=None, snapshot=None): + ''' + Downloads a file's content, metadata, and properties. You can specify a + range if you don't need to download the file in its entirety. If no range + is specified, the full file will be downloaded. + + See get_file_to_* for high level functions that handle the download + of large files with automatic chunking and progress notifications. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param int start_range: + Start of byte range to use for downloading a section of the file. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int end_range: + End of byte range to use for downloading a section of the file. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param bool validate_content: + When this is set to True and specified together with the Range header, + the service returns the MD5 hash for the range, as long as the range + is less than or equal to 4 MB in size. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: A File with content, properties, and metadata. + :rtype: :class:`~azure.storage.file.models.File` + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { 'timeout': _int_to_str(timeout), 'sharesnapshot': _to_str(snapshot)} + _validate_and_format_range_headers( + request, + start_range, + end_range, + start_range_required=False, + end_range_required=False, + check_content_md5=validate_content) + + return self._perform_request(request, _parse_file, + [file_name, validate_content], + operation_context=_context) + + def get_file_to_path(self, share_name, directory_name, file_name, file_path, + open_mode='wb', start_range=None, end_range=None, + validate_content=False, progress_callback=None, + max_connections=2, timeout=None, snapshot=None): + ''' + Downloads a file to a file path, with automatic chunking and progress + notifications. Returns an instance of File with properties and metadata. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param str file_path: + Path of file to write to. + :param str open_mode: + Mode to use when opening the file. Note that specifying append only + open_mode prevents parallel download. So, max_connections must be set + to 1 if this open_mode is used. + :param int start_range: + Start of byte range to use for downloading a section of the file. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int end_range: + End of byte range to use for downloading a section of the file. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param bool validate_content: + If set to true, validates an MD5 hash for each retrieved portion of + the file. This is primarily valuable for detecting bitflips on the wire + if using http instead of https as https (the default) will already + validate. Note that the service will only return transactional MD5s + for chunks 4MB or less so the first get request will be of size + self.MAX_CHUNK_GET_SIZE instead of self.MAX_SINGLE_GET_SIZE. If + self.MAX_CHUNK_GET_SIZE was set to greater than 4MB an error will be + thrown. As computing the MD5 takes processing time and more requests + will need to be done due to the reduced chunk size there may be some + increase in latency. + :param progress_callback: + Callback for progress with signature function(current, total) + where current is the number of bytes transfered so far, and total is + the size of the file if known. + :type progress_callback: func(current, total) + :param int max_connections: + If set to 2 or greater, an initial get will be done for the first + self.MAX_SINGLE_GET_SIZE bytes of the file. If this is the entire file, + the method returns at this point. If it is not, it will download the + remaining data parallel using the number of threads equal to + max_connections. Each chunk will be of size self.MAX_CHUNK_GET_SIZE. + If set to 1, a single large get request will be done. This is not + generally recommended but available if very few threads should be + used, network requests are very expensive, or a non-seekable stream + prevents parallel download. This may also be valuable if the file is + being concurrently modified to enforce atomicity or if many files are + expected to be empty as an extra request is required for empty files + if max_connections is greater than 1. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: A File with properties and metadata. + :rtype: :class:`~azure.storage.file.models.File` + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('file_path', file_path) + _validate_not_none('open_mode', open_mode) + + if max_connections > 1 and 'a' in open_mode: + raise ValueError(_ERROR_PARALLEL_NOT_SEEKABLE) + + with open(file_path, open_mode) as stream: + file = self.get_file_to_stream( + share_name, directory_name, file_name, stream, + start_range, end_range, validate_content, + progress_callback, max_connections, timeout, snapshot) + + return file + + def get_file_to_stream( + self, share_name, directory_name, file_name, stream, + start_range=None, end_range=None, validate_content=False, + progress_callback=None, max_connections=2, timeout=None, snapshot=None): + ''' + Downloads a file to a stream, with automatic chunking and progress + notifications. Returns an instance of :class:`~azure.storage.file.models.File` with properties + and metadata. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param io.IOBase stream: + Opened file/stream to write to. + :param int start_range: + Start of byte range to use for downloading a section of the file. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int end_range: + End of byte range to use for downloading a section of the file. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param bool validate_content: + If set to true, validates an MD5 hash for each retrieved portion of + the file. This is primarily valuable for detecting bitflips on the wire + if using http instead of https as https (the default) will already + validate. Note that the service will only return transactional MD5s + for chunks 4MB or less so the first get request will be of size + self.MAX_CHUNK_GET_SIZE instead of self.MAX_SINGLE_GET_SIZE. If + self.MAX_CHUNK_GET_SIZE was set to greater than 4MB an error will be + thrown. As computing the MD5 takes processing time and more requests + will need to be done due to the reduced chunk size there may be some + increase in latency. + :param progress_callback: + Callback for progress with signature function(current, total) + where current is the number of bytes transfered so far, and total is + the size of the file if known. + :type progress_callback: func(current, total) + :param int max_connections: + If set to 2 or greater, an initial get will be done for the first + self.MAX_SINGLE_GET_SIZE bytes of the file. If this is the entire file, + the method returns at this point. If it is not, it will download the + remaining data parallel using the number of threads equal to + max_connections. Each chunk will be of size self.MAX_CHUNK_GET_SIZE. + If set to 1, a single large get request will be done. This is not + generally recommended but available if very few threads should be + used, network requests are very expensive, or a non-seekable stream + prevents parallel download. This may also be valuable if the file is + being concurrently modified to enforce atomicity or if many files are + expected to be empty as an extra request is required for empty files + if max_connections is greater than 1. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: A File with properties and metadata. + :rtype: :class:`~azure.storage.file.models.File` + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('stream', stream) + + # If the user explicitly sets max_connections to 1, do a single shot download + if max_connections == 1: + file = self._get_file(share_name, + directory_name, + file_name, + start_range=start_range, + end_range=end_range, + validate_content=validate_content, + timeout=timeout, + snapshot=snapshot) + + # Set the download size + download_size = file.properties.content_length + + # If max_connections is greater than 1, do the first get to establish the + # size of the file and get the first segment of data + else: + if sys.version_info >= (3,) and not stream.seekable(): + raise ValueError(_ERROR_PARALLEL_NOT_SEEKABLE) + + # The service only provides transactional MD5s for chunks under 4MB. + # If validate_content is on, get only self.MAX_CHUNK_GET_SIZE for the first + # chunk so a transactional MD5 can be retrieved. + first_get_size = self.MAX_SINGLE_GET_SIZE if not validate_content else self.MAX_CHUNK_GET_SIZE + + initial_request_start = start_range if start_range is not None else 0 + + if end_range is not None and end_range - start_range < first_get_size: + initial_request_end = end_range + else: + initial_request_end = initial_request_start + first_get_size - 1 + + # Send a context object to make sure we always retry to the initial location + operation_context = _OperationContext(location_lock=True) + try: + file = self._get_file(share_name, + directory_name, + file_name, + start_range=initial_request_start, + end_range=initial_request_end, + validate_content=validate_content, + timeout=timeout, + _context=operation_context, + snapshot=snapshot) + + # Parse the total file size and adjust the download size if ranges + # were specified + file_size = _parse_length_from_content_range(file.properties.content_range) + if end_range is not None: + # Use the end_range unless it is over the end of the file + download_size = min(file_size, end_range - start_range + 1) + elif start_range is not None: + download_size = file_size - start_range + else: + download_size = file_size + except AzureHttpError as ex: + if start_range is None and ex.status_code == 416: + # Get range will fail on an empty file. If the user did not + # request a range, do a regular get request in order to get + # any properties. + file = self._get_file(share_name, + directory_name, + file_name, + validate_content=validate_content, + timeout=timeout, + _context=operation_context, + snapshot=snapshot) + + # Set the download size to empty + download_size = 0 + else: + raise ex + + # Mark the first progress chunk. If the file is small or this is a single + # shot download, this is the only call + if progress_callback: + progress_callback(file.properties.content_length, download_size) + + # Write the content to the user stream + # Clear file content since output has been written to user stream + if file.content is not None: + stream.write(file.content) + file.content = None + + # If the file is small or single shot download was used, the download is + # complete at this point. If file size is large, use parallel download. + if file.properties.content_length != download_size: + # At this point would like to lock on something like the etag so that + # if the file is modified, we dont get a corrupted download. However, + # this feature is not yet available on the file service. + + end_file = file_size + if end_range is not None: + # Use the end_range unless it is over the end of the file + end_file = min(file_size, end_range + 1) + + _download_file_chunks( + self, + share_name, + directory_name, + file_name, + download_size, + self.MAX_CHUNK_GET_SIZE, + first_get_size, + initial_request_end + 1, # start where the first download ended + end_file, + stream, + max_connections, + progress_callback, + validate_content, + timeout, + operation_context, + snapshot + ) + + # Set the content length to the download size instead of the size of + # the last range + file.properties.content_length = download_size + + # Overwrite the content range to the user requested range + file.properties.content_range = 'bytes {0}-{1}/{2}'.format(start_range, end_range, file_size) + + # Overwrite the content MD5 as it is the MD5 for the last range instead + # of the stored MD5 + # TODO: Set to the stored MD5 when the service returns this + file.properties.content_md5 = None + + return file + + def get_file_to_bytes(self, share_name, directory_name, file_name, + start_range=None, end_range=None, validate_content=False, + progress_callback=None, max_connections=2, timeout=None, snapshot=None): + ''' + Downloads a file as an array of bytes, with automatic chunking and + progress notifications. Returns an instance of :class:`~azure.storage.file.models.File` with + properties, metadata, and content. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param int start_range: + Start of byte range to use for downloading a section of the file. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int end_range: + End of byte range to use for downloading a section of the file. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param bool validate_content: + If set to true, validates an MD5 hash for each retrieved portion of + the file. This is primarily valuable for detecting bitflips on the wire + if using http instead of https as https (the default) will already + validate. Note that the service will only return transactional MD5s + for chunks 4MB or less so the first get request will be of size + self.MAX_CHUNK_GET_SIZE instead of self.MAX_SINGLE_GET_SIZE. If + self.MAX_CHUNK_GET_SIZE was set to greater than 4MB an error will be + thrown. As computing the MD5 takes processing time and more requests + will need to be done due to the reduced chunk size there may be some + increase in latency. + :param progress_callback: + Callback for progress with signature function(current, total) + where current is the number of bytes transfered so far, and total is + the size of the file if known. + :type progress_callback: func(current, total) + :param int max_connections: + If set to 2 or greater, an initial get will be done for the first + self.MAX_SINGLE_GET_SIZE bytes of the file. If this is the entire file, + the method returns at this point. If it is not, it will download the + remaining data parallel using the number of threads equal to + max_connections. Each chunk will be of size self.MAX_CHUNK_GET_SIZE. + If set to 1, a single large get request will be done. This is not + generally recommended but available if very few threads should be + used, network requests are very expensive, or a non-seekable stream + prevents parallel download. This may also be valuable if the file is + being concurrently modified to enforce atomicity or if many files are + expected to be empty as an extra request is required for empty files + if max_connections is greater than 1. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: A File with properties, content, and metadata. + :rtype: :class:`~azure.storage.file.models.File` + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + + stream = BytesIO() + file = self.get_file_to_stream( + share_name, + directory_name, + file_name, + stream, + start_range, + end_range, + validate_content, + progress_callback, + max_connections, + timeout, + snapshot) + + file.content = stream.getvalue() + return file + + def get_file_to_text( + self, share_name, directory_name, file_name, encoding='utf-8', + start_range=None, end_range=None, validate_content=False, + progress_callback=None, max_connections=2, timeout=None, snapshot=None): + ''' + Downloads a file as unicode text, with automatic chunking and progress + notifications. Returns an instance of :class:`~azure.storage.file.models.File` with properties, + metadata, and content. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param str encoding: + Python encoding to use when decoding the file data. + :param int start_range: + Start of byte range to use for downloading a section of the file. + If no end_range is given, all bytes after the start_range will be downloaded. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int end_range: + End of byte range to use for downloading a section of the file. + If end_range is given, start_range must be provided. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param bool validate_content: + If set to true, validates an MD5 hash for each retrieved portion of + the file. This is primarily valuable for detecting bitflips on the wire + if using http instead of https as https (the default) will already + validate. Note that the service will only return transactional MD5s + for chunks 4MB or less so the first get request will be of size + self.MAX_CHUNK_GET_SIZE instead of self.MAX_SINGLE_GET_SIZE. If + self.MAX_CHUNK_GET_SIZE was set to greater than 4MB an error will be + thrown. As computing the MD5 takes processing time and more requests + will need to be done due to the reduced chunk size there may be some + increase in latency. + :param progress_callback: + Callback for progress with signature function(current, total) + where current is the number of bytes transfered so far, and total is + the size of the file if known. + :type progress_callback: func(current, total) + :param int max_connections: + If set to 2 or greater, an initial get will be done for the first + self.MAX_SINGLE_GET_SIZE bytes of the file. If this is the entire file, + the method returns at this point. If it is not, it will download the + remaining data parallel using the number of threads equal to + max_connections. Each chunk will be of size self.MAX_CHUNK_GET_SIZE. + If set to 1, a single large get request will be done. This is not + generally recommended but available if very few threads should be + used, network requests are very expensive, or a non-seekable stream + prevents parallel download. This may also be valuable if the file is + being concurrently modified to enforce atomicity or if many files are + expected to be empty as an extra request is required for empty files + if max_connections is greater than 1. + :param int timeout: + The timeout parameter is expressed in seconds. This method may make + multiple calls to the Azure service and the timeout will apply to + each call individually. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :return: A File with properties, content, and metadata. + :rtype: :class:`~azure.storage.file.models.File` + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('encoding', encoding) + + file = self.get_file_to_bytes( + share_name, + directory_name, + file_name, + start_range, + end_range, + validate_content, + progress_callback, + max_connections, + timeout, + snapshot) + + file.content = file.content.decode(encoding) + return file + + def update_range(self, share_name, directory_name, file_name, data, + start_range, end_range, validate_content=False, timeout=None): + ''' + Writes the bytes specified by the request body into the specified range. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param bytes data: + Content of the range. + :param int start_range: + Start of byte range to use for updating a section of the file. + The range can be up to 4 MB in size. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int end_range: + End of byte range to use for updating a section of the file. + The range can be up to 4 MB in size. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param bool validate_content: + If true, calculates an MD5 hash of the page content. The storage + service checks the hash of the content that has arrived + with the hash that was sent. This is primarily valuable for detecting + bitflips on the wire if using http instead of https as https (the default) + will already validate. Note that this MD5 hash is not stored with the + file. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + _validate_not_none('data', data) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { + 'comp': 'range', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'x-ms-write': 'update', + } + _validate_and_format_range_headers( + request, start_range, end_range) + request.body = _get_data_bytes_only('data', data) + + if validate_content: + computed_md5 = _get_content_md5(request.body) + request.headers['Content-MD5'] = _to_str(computed_md5) + + self._perform_request(request) + + def clear_range(self, share_name, directory_name, file_name, start_range, + end_range, timeout=None): + ''' + Clears the specified range and releases the space used in storage for + that range. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param int start_range: + Start of byte range to use for clearing a section of the file. + The range can be up to 4 MB in size. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int end_range: + End of byte range to use for clearing a section of the file. + The range can be up to 4 MB in size. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int timeout: + The timeout parameter is expressed in seconds. + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { + 'comp': 'range', + 'timeout': _int_to_str(timeout), + } + request.headers = { + 'Content-Length': '0', + 'x-ms-write': 'clear', + } + _validate_and_format_range_headers( + request, start_range, end_range) + + self._perform_request(request) + + def list_ranges(self, share_name, directory_name, file_name, + start_range=None, end_range=None, timeout=None, snapshot=None): + ''' + Retrieves the valid ranges for a file. + + :param str share_name: + Name of existing share. + :param str directory_name: + The path to the directory. + :param str file_name: + Name of existing file. + :param int start_range: + Specifies the start offset of bytes over which to list ranges. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int end_range: + Specifies the end offset of bytes over which to list ranges. + The start_range and end_range params are inclusive. + Ex: start_range=0, end_range=511 will download first 512 bytes of file. + :param int timeout: + The timeout parameter is expressed in seconds. + :param str snapshot: + A string that represents the snapshot version, if applicable. + :returns: a list of valid ranges + :rtype: a list of :class:`~azure.storage.file.models.FileRange` + ''' + _validate_not_none('share_name', share_name) + _validate_not_none('file_name', file_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(share_name, directory_name, file_name) + request.query = { + 'comp': 'rangelist', + 'timeout': _int_to_str(timeout), + 'sharesnapshot': _to_str(snapshot), + } + if start_range is not None: + _validate_and_format_range_headers( + request, + start_range, + end_range, + start_range_required=False, + end_range_required=False) + + return self._perform_request(request, _convert_xml_to_ranges) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/models.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/models.py new file mode 100644 index 00000000000..08113710226 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/models.py @@ -0,0 +1,407 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from ..common._common_conversion import _to_str + + +class Share(object): + ''' + File share class. + + :ivar str name: + The name of the share. + :ivar ShareProperties properties: + System properties for the share. + :ivar metadata: + A dict containing name-value pairs associated with the share as metadata. + This var is set to None unless the include=metadata param was included + for the list shares operation. If this parameter was specified but the + share has no metadata, metadata will be set to an empty dictionary. + :vartype metadata: dict(str, str) + :ivar str snapshot: + A DateTime value that uniquely identifies the snapshot. The value of + this header indicates the snapshot version, and may be used in + subsequent requests to access the snapshot. + ''' + + def __init__(self, name=None, props=None, metadata=None, snapshot=None): + self.name = name + self.properties = props or ShareProperties() + self.metadata = metadata + self.snapshot = snapshot + + +class ShareProperties(object): + ''' + File share's properties class. + + :ivar datetime last_modified: + A datetime object representing the last time the share was modified. + :ivar str etag: + The ETag contains a value that you can use to perform operations + conditionally. + :ivar int quote: + Returns the current share quota in GB. + ''' + + def __init__(self): + self.last_modified = None + self.etag = None + self.quota = None + + +class Directory(object): + ''' + Directory class. + + :ivar str name: + The name of the directory. + :ivar DirectoryProperties properties: + System properties for the directory. + :ivar metadata: + A dict containing name-value pairs associated with the directory as metadata. + This var is set to None unless the include=metadata param was included + for the list directory operation. If this parameter was specified but the + directory has no metadata, metadata will be set to an empty dictionary. + :vartype metadata: dict(str, str) + ''' + + def __init__(self, name=None, props=None, metadata=None): + self.name = name + self.properties = props or DirectoryProperties() + self.metadata = metadata + + +class DirectoryProperties(object): + ''' + File directory's properties class. + + :ivar datetime last_modified: + A datetime object representing the last time the directory was modified. + :ivar str etag: + The ETag contains a value that you can use to perform operations + conditionally. + :ivar bool server_encrypted: + Set to true if the directory metadata is encrypted on the server. + ''' + + def __init__(self): + self.last_modified = None + self.etag = None + self.server_encrypted = None + + +class File(object): + ''' + File class. + + :ivar str name: + The name of the file. + :ivar content: + File content. + :vartype content: str or bytes + :ivar FileProperties properties: + System properties for the file. + :ivar metadata: + A dict containing name-value pairs associated with the file as metadata. + This var is set to None unless the include=metadata param was included + for the list file operation. If this parameter was specified but the + file has no metadata, metadata will be set to an empty dictionary. + :vartype metadata: dict(str, str) + ''' + + def __init__(self, name=None, content=None, props=None, metadata=None): + self.name = name + self.content = content + self.properties = props or FileProperties() + self.metadata = metadata + + +class FileProperties(object): + ''' + File Properties. + + :ivar datetime last_modified: + A datetime object representing the last time the file was modified. + :ivar str etag: + The ETag contains a value that you can use to perform operations + conditionally. + :ivar int content_length: + The length of the content returned. If the entire blob was requested, + the length of blob in bytes. If a subset of the blob was requested, the + length of the returned subset. + :ivar str content_range: + Indicates the range of bytes returned in the event that the client + requested a subset of the blob. + :ivar ~azure.storage.file.models.ContentSettings content_settings: + Stores all the content settings for the file. + :ivar ~azure.storage.file.models.CopyProperties copy: + Stores all the copy properties for the file. + ivar bool server_encrypted: + Set to true if the file data and application metadata are completely encrypted. + ''' + + def __init__(self): + self.last_modified = None + self.etag = None + self.content_length = None + self.content_range = None + self.content_settings = ContentSettings() + self.copy = CopyProperties() + self.server_encrypted = None + + +class ContentSettings(object): + ''' + Used to store the content settings of a file. + + :ivar str content_type: + The content type specified for the file. If no content type was + specified, the default content type is application/octet-stream. + :ivar str content_encoding: + If content_encoding has previously been set + for the file, that value is stored. + :ivar str content_language: + If content_language has previously been set + for the file, that value is stored. + :ivar str content_disposition: + content_disposition conveys additional information about how to + process the response payload, and also can be used to attach + additional metadata. If content_disposition has previously been set + for the file, that value is stored. + :ivar str cache_control: + If cache_control has previously been set for + the file, that value is stored. + :ivar str content_md5: + If the content_md5 has been set for the file, this response + header is stored so that the client can check for message content + integrity. + ''' + + def __init__( + self, content_type=None, content_encoding=None, + content_language=None, content_disposition=None, + cache_control=None, content_md5=None): + self.content_type = content_type + self.content_encoding = content_encoding + self.content_language = content_language + self.content_disposition = content_disposition + self.cache_control = cache_control + self.content_md5 = content_md5 + + def _to_headers(self): + return { + 'x-ms-cache-control': _to_str(self.cache_control), + 'x-ms-content-type': _to_str(self.content_type), + 'x-ms-content-disposition': _to_str(self.content_disposition), + 'x-ms-content-md5': _to_str(self.content_md5), + 'x-ms-content-encoding': _to_str(self.content_encoding), + 'x-ms-content-language': _to_str(self.content_language), + } + + +class CopyProperties(object): + ''' + File Copy Properties. + + :ivar str id: + String identifier for the last attempted Copy File operation where this file + was the destination file. This header does not appear if this file has never + been the destination in a Copy File operation, or if this file has been + modified after a concluded Copy File operation using Set File Properties or + Put File. + :ivar str source: + URL up to 2 KB in length that specifies the source file used in the last attempted + Copy File operation where this file was the destination file. This header does not + appear if this file has never been the destination in a Copy File operation, or if + this file has been modified after a concluded Copy File operation using + Set File Properties or Put File. + :ivar str status: + State of the copy operation identified by Copy ID, with these values: + success: + Copy completed successfully. + pending: + Copy is in progress. Check copy_status_description if intermittent, + non-fatal errors impede copy progress but don't cause failure. + aborted: + Copy was ended by Abort Copy File. + failed: + Copy failed. See copy_status_description for failure details. + :ivar str progress: + Contains the number of bytes copied and the total bytes in the source in the last + attempted Copy File operation where this file was the destination file. Can show + between 0 and Content-Length bytes copied. + :ivar datetime completion_time: + Conclusion time of the last attempted Copy File operation where this file was the + destination file. This value can specify the time of a completed, aborted, or + failed copy attempt. + :ivar str status_description: + Only appears when x-ms-copy-status is failed or pending. Describes cause of fatal + or non-fatal copy operation failure. + ''' + + def __init__(self): + self.id = None + self.source = None + self.status = None + self.progress = None + self.completion_time = None + self.status_description = None + + +class FileRange(object): + ''' + File Range. + + :ivar int start: + Byte index for start of file range. + :ivar int end: + Byte index for end of file range. + ''' + + def __init__(self, start=None, end=None): + self.start = start + self.end = end + + +class DeleteSnapshot(object): + ''' + Required if the Share has associated snapshots. Specifies how to handle the snapshots. + ''' + + Include = 'include' + ''' + Delete the share and all of its snapshots. + ''' + + +class FilePermissions(object): + ''' + FilePermissions class to be used with + :func:`~azure.storage.file.fileservice.FileService.generate_file_shared_access_signature` API. + + :ivar FilePermissions FilePermissions.CREATE: + Create a new file or copy a file to a new file. + :ivar FilePermissions FilePermissions.DELETE: + Delete the file. + :ivar FilePermissions FilePermissions.READ: + Read the content, properties, metadata. Use the file as the source of a copy + operation. + :ivar FilePermissions FilePermissions.WRITE: + Create or write content, properties, metadata. Resize the file. Use the file + as the destination of a copy operation within the same account. + ''' + + def __init__(self, read=False, create=False, write=False, delete=False, + _str=None): + ''' + :param bool read: + Read the content, properties, metadata. Use the file as the source of a copy + operation. + :param bool create: + Create a new file or copy a file to a new file. + :param bool write: + Create or write content, properties, metadata. Resize the file. Use the file + as the destination of a copy operation within the same account. + :param bool delete: + Delete the file. + :param str _str: + A string representing the permissions. + ''' + + if not _str: + _str = '' + self.read = read or ('r' in _str) + self.create = create or ('c' in _str) + self.write = write or ('w' in _str) + self.delete = delete or ('d' in _str) + + def __or__(self, other): + return FilePermissions(_str=str(self) + str(other)) + + def __add__(self, other): + return FilePermissions(_str=str(self) + str(other)) + + def __str__(self): + return (('r' if self.read else '') + + ('c' if self.create else '') + + ('w' if self.write else '') + + ('d' if self.delete else '')) + + +FilePermissions.CREATE = FilePermissions(create=True) +FilePermissions.DELETE = FilePermissions(delete=True) +FilePermissions.READ = FilePermissions(read=True) +FilePermissions.WRITE = FilePermissions(write=True) + + +class SharePermissions(object): + ''' + SharePermissions class to be used with `azure.storage.file.FileService.generate_share_shared_access_signature` + method and for the AccessPolicies used with `azure.storage.file.FileService.set_share_acl`. + + :ivar SharePermissions FilePermissions.DELETE: + Delete any file in the share. + Note: You cannot grant permissions to delete a share with a service SAS. Use + an account SAS instead. + :ivar SharePermissions FilePermissions.LIST: + List files and directories in the share. + :ivar SharePermissions FilePermissions.READ: + Read the content, properties or metadata of any file in the share. Use any + file in the share as the source of a copy operation. + :ivar SharePermissions FilePermissions.WRITE: + For any file in the share, create or write content, properties or metadata. + Resize the file. Use the file as the destination of a copy operation within + the same account. + Note: You cannot grant permissions to read or write share properties or + metadata with a service SAS. Use an account SAS instead. + ''' + + def __init__(self, read=False, write=False, delete=False, list=False, + _str=None): + ''' + :param bool read: + Read the content, properties or metadata of any file in the share. Use any + file in the share as the source of a copy operation. + :param bool write: + For any file in the share, create or write content, properties or metadata. + Resize the file. Use the file as the destination of a copy operation within + the same account. + Note: You cannot grant permissions to read or write share properties or + metadata with a service SAS. Use an account SAS instead. + :param bool delete: + Delete any file in the share. + Note: You cannot grant permissions to delete a share with a service SAS. Use + an account SAS instead. + :param bool list: + List files and directories in the share. + :param str _str: + A string representing the permissions + ''' + + if not _str: + _str = '' + self.read = read or ('r' in _str) + self.write = write or ('w' in _str) + self.delete = delete or ('d' in _str) + self.list = list or ('l' in _str) + + def __or__(self, other): + return SharePermissions(_str=str(self) + str(other)) + + def __add__(self, other): + return SharePermissions(_str=str(self) + str(other)) + + def __str__(self): + return (('r' if self.read else '') + + ('w' if self.write else '') + + ('d' if self.delete else '') + + ('l' if self.list else '')) + + +SharePermissions.DELETE = SharePermissions(delete=True) +SharePermissions.LIST = SharePermissions(list=True) +SharePermissions.READ = SharePermissions(read=True) +SharePermissions.WRITE = SharePermissions(write=True) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/sharedaccesssignature.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/sharedaccesssignature.py new file mode 100644 index 00000000000..de52de1ee4c --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/file/sharedaccesssignature.py @@ -0,0 +1,188 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +from ..common.sharedaccesssignature import ( + SharedAccessSignature, + _SharedAccessHelper, +) +from ..common._common_conversion import ( + _to_str, +) +from ._constants import X_MS_VERSION + + +class FileSharedAccessSignature(SharedAccessSignature): + ''' + Provides a factory for creating file and share access + signature tokens with a common account name and account key. Users can either + use the factory or can construct the appropriate service and use the + generate_*_shared_access_signature method directly. + ''' + + def __init__(self, account_name, account_key): + ''' + :param str account_name: + The storage account name used to generate the shared access signatures. + :param str account_key: + The access key to generate the shares access signatures. + ''' + super(FileSharedAccessSignature, self).__init__(account_name, account_key, x_ms_version=X_MS_VERSION) + + def generate_file(self, share_name, directory_name=None, file_name=None, + permission=None, expiry=None, start=None, id=None, + ip=None, protocol=None, cache_control=None, + content_disposition=None, content_encoding=None, + content_language=None, content_type=None): + ''' + Generates a shared access signature for the file. + Use the returned signature with the sas_token parameter of FileService. + + :param str share_name: + Name of share. + :param str directory_name: + Name of directory. SAS tokens cannot be created for directories, so + this parameter should only be present if file_name is provided. + :param str file_name: + Name of file. + :param FilePermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, create, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use + set_file_service_properties. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + ''' + resource_path = share_name + if directory_name is not None: + resource_path += '/' + _to_str(directory_name) + resource_path += '/' + _to_str(file_name) + + sas = _SharedAccessHelper() + sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) + sas.add_id(id) + sas.add_resource('f') + sas.add_override_response_headers(cache_control, content_disposition, + content_encoding, content_language, + content_type) + sas.add_resource_signature(self.account_name, self.account_key, 'file', resource_path) + + return sas.get_token() + + def generate_share(self, share_name, permission=None, expiry=None, + start=None, id=None, ip=None, protocol=None, + cache_control=None, content_disposition=None, + content_encoding=None, content_language=None, + content_type=None): + ''' + Generates a shared access signature for the share. + Use the returned signature with the sas_token parameter of FileService. + + :param str share_name: + Name of share. + :param SharePermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, create, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use + set_file_service_properties. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + ''' + sas = _SharedAccessHelper() + sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) + sas.add_id(id) + sas.add_resource('s') + sas.add_override_response_headers(cache_control, content_disposition, + content_encoding, content_language, + content_type) + sas.add_resource_signature(self.account_name, self.account_key, 'file', share_name) + + return sas.get_token() diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/__init__.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/__init__.py new file mode 100644 index 00000000000..0c64f78907f --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/__init__.py @@ -0,0 +1,13 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from .models import ( + Queue, + QueueMessage, + QueuePermissions, + QueueMessageFormat, +) + +from .queueservice import QueueService diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_constants.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_constants.py new file mode 100644 index 00000000000..9ec0ece8853 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_constants.py @@ -0,0 +1,11 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +__author__ = 'Microsoft Corp. ' +__version__ = '1.2.0rc0' + +# x-ms-version for storage service. +X_MS_VERSION = '2017-11-09' diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_deserialization.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_deserialization.py new file mode 100644 index 00000000000..d0ef2973c9e --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_deserialization.py @@ -0,0 +1,150 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from dateutil import parser + +try: + from xml.etree import cElementTree as ETree +except ImportError: + from xml.etree import ElementTree as ETree + +from .models import ( + Queue, + QueueMessage, +) +from ..common.models import ( + _list, +) +from ..common._deserialization import ( + _to_int, + _parse_metadata, +) +from ._encryption import ( + _decrypt_queue_message, +) + + +def _parse_metadata_and_message_count(response): + ''' + Extracts approximate messages count header. + ''' + metadata = _parse_metadata(response) + metadata.approximate_message_count = _to_int(response.headers.get('x-ms-approximate-messages-count')) + + return metadata + + +def _parse_queue_message_from_headers(response): + ''' + Extracts pop receipt and time next visible from headers. + ''' + message = QueueMessage() + message.pop_receipt = response.headers.get('x-ms-popreceipt') + message.time_next_visible = parser.parse(response.headers.get('x-ms-time-next-visible')) + + return message + + +def _convert_xml_to_queues(response): + ''' + + + string-value + string-value + int-value + + + string-value + + value + + + + + ''' + if response is None or response.body is None: + return None + + queues = _list() + list_element = ETree.fromstring(response.body) + + # Set next marker + next_marker = list_element.findtext('NextMarker') or None + setattr(queues, 'next_marker', next_marker) + + queues_element = list_element.find('Queues') + + for queue_element in queues_element.findall('Queue'): + # Name element + queue = Queue() + queue.name = queue_element.findtext('Name') + + # Metadata + metadata_root_element = queue_element.find('Metadata') + if metadata_root_element is not None: + queue.metadata = dict() + for metadata_element in metadata_root_element: + queue.metadata[metadata_element.tag] = metadata_element.text + + # Add queue to list + queues.append(queue) + + return queues + + +def _convert_xml_to_queue_messages(response, decode_function, require_encryption, key_encryption_key, resolver, + content=None): + ''' + + + + string-message-id + insertion-time + expiration-time + opaque-string-receipt-data + time-next-visible + integer + message-body + + + ''' + if response is None or response.body is None: + return None + + messages = list() + list_element = ETree.fromstring(response.body) + + for message_element in list_element.findall('QueueMessage'): + message = QueueMessage() + + message.id = message_element.findtext('MessageId') + + dequeue_count = message_element.findtext('DequeueCount') + if dequeue_count is not None: + message.dequeue_count = _to_int(dequeue_count) + + # content is not returned for put_message + if content is not None: + message.content = content + else: + message.content = message_element.findtext('MessageText') + if (key_encryption_key is not None) or (resolver is not None): + message.content = _decrypt_queue_message(message.content, require_encryption, + key_encryption_key, resolver) + message.content = decode_function(message.content) + + message.insertion_time = parser.parse(message_element.findtext('InsertionTime')) + message.expiration_time = parser.parse(message_element.findtext('ExpirationTime')) + + message.pop_receipt = message_element.findtext('PopReceipt') + + time_next_visible = message_element.find('TimeNextVisible') + if time_next_visible is not None: + message.time_next_visible = parser.parse(time_next_visible.text) + + # Add message to list + messages.append(message) + + return messages diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_encryption.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_encryption.py new file mode 100644 index 00000000000..75979f36411 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_encryption.py @@ -0,0 +1,159 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +import os +from json import ( + dumps, + loads, +) + +from azure.common import ( + AzureException, +) +from cryptography.hazmat.primitives.padding import PKCS7 + +from ..common._common_conversion import ( + _encode_base64, + _decode_base64_to_bytes +) +from ..common._encryption import ( + _generate_encryption_data_dict, + _dict_to_encryption_data, + _generate_AES_CBC_cipher, + _validate_and_unwrap_cek, + _EncryptionAlgorithm, +) +from ..common._error import ( + _ERROR_DECRYPTION_FAILURE, + _ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM, + _validate_not_none, + _validate_key_encryption_key_wrap, +) +from ._error import ( + _ERROR_MESSAGE_NOT_ENCRYPTED +) + + +def _encrypt_queue_message(message, key_encryption_key): + ''' + Encrypts the given plain text message using AES256 in CBC mode with 128 bit padding. + Wraps the generated content-encryption-key using the user-provided key-encryption-key (kek). + Returns a json-formatted string containing the encrypted message and the encryption metadata. + + :param object message: + The plain text messge to be encrypted. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + wrap_key(key)--wraps the specified key using an algorithm of the user's choice. + get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key. + get_kid()--returns a string key id for this key-encryption-key. + :return: A json-formatted string containing the encrypted message and the encryption metadata. + :rtype: str + ''' + + _validate_not_none('message', message) + _validate_not_none('key_encryption_key', key_encryption_key) + _validate_key_encryption_key_wrap(key_encryption_key) + + # AES256 uses 256 bit (32 byte) keys and always with 16 byte blocks + content_encryption_key = os.urandom(32) + initialization_vector = os.urandom(16) + + # Queue encoding functions all return unicode strings, and encryption should + # operate on binary strings. + message = message.encode('utf-8') + + cipher = _generate_AES_CBC_cipher(content_encryption_key, initialization_vector) + + # PKCS7 with 16 byte blocks ensures compatibility with AES. + padder = PKCS7(128).padder() + padded_data = padder.update(message) + padder.finalize() + + # Encrypt the data. + encryptor = cipher.encryptor() + encrypted_data = encryptor.update(padded_data) + encryptor.finalize() + + # Build the dictionary structure. + queue_message = {'EncryptedMessageContents': _encode_base64(encrypted_data), + 'EncryptionData': _generate_encryption_data_dict(key_encryption_key, + content_encryption_key, + initialization_vector)} + + return dumps(queue_message) + + +def _decrypt_queue_message(message, require_encryption, key_encryption_key, resolver): + ''' + Returns the decrypted message contents from an EncryptedQueueMessage. + If no encryption metadata is present, will return the unaltered message. + :param str message: + The JSON formatted QueueEncryptedMessage contents with all associated metadata. + :param bool require_encryption: + If set, will enforce that the retrieved messages are encrypted and decrypt them. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + unwrap_key(key, algorithm)--returns the unwrapped form of the specified symmetric key using the string-specified algorithm. + get_kid()--returns a string key id for this key-encryption-key. + :param function resolver(kid): + The user-provided key resolver. Uses the kid string to return a key-encryption-key implementing the interface defined above. + :return: The plain text message from the queue message. + :rtype: str + ''' + + try: + message = loads(message) + + encryption_data = _dict_to_encryption_data(message['EncryptionData']) + decoded_data = _decode_base64_to_bytes(message['EncryptedMessageContents']) + except (KeyError, ValueError): + # Message was not json formatted and so was not encrypted + # or the user provided a json formatted message. + if require_encryption: + raise ValueError(_ERROR_MESSAGE_NOT_ENCRYPTED) + else: + return message + try: + return _decrypt(decoded_data, encryption_data, key_encryption_key, resolver).decode('utf-8') + except Exception: + raise AzureException(_ERROR_DECRYPTION_FAILURE) + + +def _decrypt(message, encryption_data, key_encryption_key=None, resolver=None): + ''' + Decrypts the given ciphertext using AES256 in CBC mode with 128 bit padding. + Unwraps the content-encryption-key using the user-provided or resolved key-encryption-key (kek). Returns the original plaintex. + + :param str message: + The ciphertext to be decrypted. + :param _EncryptionData encryption_data: + The metadata associated with this ciphertext. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + unwrap_key(key, algorithm)--returns the unwrapped form of the specified symmetric key using the string-specified algorithm. + get_kid()--returns a string key id for this key-encryption-key. + :param function resolver(kid): + The user-provided key resolver. Uses the kid string to return a key-encryption-key implementing the interface defined above. + :return: The decrypted plaintext. + :rtype: str + ''' + _validate_not_none('message', message) + content_encryption_key = _validate_and_unwrap_cek(encryption_data, key_encryption_key, resolver) + + if not (_EncryptionAlgorithm.AES_CBC_256 == encryption_data.encryption_agent.encryption_algorithm): + raise ValueError(_ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM) + + cipher = _generate_AES_CBC_cipher(content_encryption_key, encryption_data.content_encryption_IV) + + # decrypt data + decrypted_data = message + decryptor = cipher.decryptor() + decrypted_data = (decryptor.update(decrypted_data) + decryptor.finalize()) + + # unpad data + unpadder = PKCS7(128).unpadder() + decrypted_data = (unpadder.update(decrypted_data) + unpadder.finalize()) + + return decrypted_data diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_error.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_error.py new file mode 100644 index 00000000000..cb15935dd8b --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_error.py @@ -0,0 +1,27 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys + +from ..common._error import ( + _validate_type_bytes, +) + +_ERROR_MESSAGE_SHOULD_BE_UNICODE = 'message should be of type unicode.' +_ERROR_MESSAGE_SHOULD_BE_STR = 'message should be of type str.' +_ERROR_MESSAGE_NOT_BASE64 = 'message is not a valid base64 value.' +_ERROR_MESSAGE_NOT_ENCRYPTED = 'Message was not encrypted.' + +def _validate_message_type_text(param): + if sys.version_info < (3,): + if not isinstance(param, unicode): + raise TypeError(_ERROR_MESSAGE_SHOULD_BE_UNICODE) + else: + if not isinstance(param, str): + raise TypeError(_ERROR_MESSAGE_SHOULD_BE_STR) + + +def _validate_message_type_bytes(param): + _validate_type_bytes('message', param) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_serialization.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_serialization.py new file mode 100644 index 00000000000..21569e5f508 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/_serialization.py @@ -0,0 +1,73 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys + +if sys.version_info >= (3,): + from io import BytesIO +else: + try: + from cStringIO import StringIO as BytesIO + except: + from StringIO import StringIO as BytesIO + +try: + from xml.etree import cElementTree as ETree +except ImportError: + from xml.etree import ElementTree as ETree + +from ..common._common_conversion import ( + _str, +) +from ._encryption import ( + _encrypt_queue_message, +) + + +def _get_path(queue_name=None, include_messages=None, message_id=None): + ''' + Creates the path to access a queue resource. + + queue_name: + Name of queue. + include_messages: + Whether or not to include messages. + message_id: + Message id. + ''' + if queue_name and include_messages and message_id: + return '/{0}/messages/{1}'.format(_str(queue_name), message_id) + if queue_name and include_messages: + return '/{0}/messages'.format(_str(queue_name)) + elif queue_name: + return '/{0}'.format(_str(queue_name)) + else: + return '/' + + +def _convert_queue_message_xml(message_text, encode_function, key_encryption_key): + ''' + + + + + ''' + queue_message_element = ETree.Element('QueueMessage') + + # Enabled + message_text = encode_function(message_text) + if key_encryption_key is not None: + message_text = _encrypt_queue_message(message_text, key_encryption_key) + ETree.SubElement(queue_message_element, 'MessageText').text = message_text + + # Add xml declaration and serialize + try: + stream = BytesIO() + ETree.ElementTree(queue_message_element).write(stream, xml_declaration=True, encoding='utf-8', method='xml') + output = stream.getvalue() + finally: + stream.close() + + return output diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/models.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/models.py new file mode 100644 index 00000000000..fb3932a608d --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/models.py @@ -0,0 +1,239 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from base64 import ( + b64encode, + b64decode, +) +from xml.sax.saxutils import escape as xml_escape +from xml.sax.saxutils import unescape as xml_unescape + +from ._error import ( + _validate_message_type_bytes, + _validate_message_type_text, + _ERROR_MESSAGE_NOT_BASE64, +) + + +class Queue(object): + ''' + Queue class. + + :ivar str name: + The name of the queue. + :ivar metadata: + A dict containing name-value pairs associated with the queue as metadata. + This var is set to None unless the include=metadata param was included + for the list queues operation. If this parameter was specified but the + queue has no metadata, metadata will be set to an empty dictionary. + :vartype metadata: dict(str, str) + ''' + + def __init__(self): + self.name = None + self.metadata = None + + +class QueueMessage(object): + ''' + Queue message class. + + :ivar str id: + A GUID value assigned to the message by the Queue service that + identifies the message in the queue. This value may be used together + with the value of pop_receipt to delete a message from the queue after + it has been retrieved with the get messages operation. + :ivar date insertion_time: + A UTC date value representing the time the messages was inserted. + :ivar date expiration_time: + A UTC date value representing the time the message expires. + :ivar int dequeue_count: + Begins with a value of 1 the first time the message is dequeued. This + value is incremented each time the message is subsequently dequeued. + :ivar obj content: + The message content. Type is determined by the decode_function set on + the service. Default is str. + :ivar str pop_receipt: + A receipt str which can be used together with the message_id element to + delete a message from the queue after it has been retrieved with the get + messages operation. Only returned by get messages operations. Set to + None for peek messages. + :ivar date time_next_visible: + A UTC date value representing the time the message will next be visible. + Only returned by get messages operations. Set to None for peek messages. + ''' + + def __init__(self): + self.id = None + self.insertion_time = None + self.expiration_time = None + self.dequeue_count = None + self.content = None + self.pop_receipt = None + self.time_next_visible = None + + +class QueueMessageFormat: + ''' + Encoding and decoding methods which can be used to modify how the queue service + encodes and decodes queue messages. Set these to queueservice.encode_function + and queueservice.decode_function to modify the behavior. The defaults are + text_xmlencode and text_xmldecode, respectively. + ''' + + @staticmethod + def text_base64encode(data): + ''' + Base64 encode unicode text. + + :param str data: String to encode. + :return: Base64 encoded string. + :rtype: str + ''' + _validate_message_type_text(data) + return b64encode(data.encode('utf-8')).decode('utf-8') + + @staticmethod + def text_base64decode(data): + ''' + Base64 decode to unicode text. + + :param str data: String data to decode to unicode. + :return: Base64 decoded string. + :rtype: str + ''' + try: + return b64decode(data.encode('utf-8')).decode('utf-8') + except (ValueError, TypeError): + # ValueError for Python 3, TypeError for Python 2 + raise ValueError(_ERROR_MESSAGE_NOT_BASE64) + + @staticmethod + def binary_base64encode(data): + ''' + Base64 encode byte strings. + + :param str data: Binary string to encode. + :return: Base64 encoded data. + :rtype: str + ''' + _validate_message_type_bytes(data) + return b64encode(data).decode('utf-8') + + @staticmethod + def binary_base64decode(data): + ''' + Base64 decode to byte string. + + :param str data: Data to decode to a byte string. + :return: Base64 decoded data. + :rtype: str + ''' + try: + return b64decode(data.encode('utf-8')) + except (ValueError, TypeError): + # ValueError for Python 3, TypeError for Python 2 + raise ValueError(_ERROR_MESSAGE_NOT_BASE64) + + @staticmethod + def text_xmlencode(data): + ''' + XML encode unicode text. + + :param str data: Unicode string to encode + :return: XML encoded data. + :rtype: str + ''' + _validate_message_type_text(data) + return xml_escape(data) + + @staticmethod + def text_xmldecode(data): + ''' + XML decode to unicode text. + + :param str data: Data to decode to unicode. + :return: XML decoded data. + :rtype: str + ''' + return xml_unescape(data) + + @staticmethod + def noencode(data): + ''' + Do no encoding. + + :param str data: Data. + :return: The data passed in is returned unmodified. + :rtype: str + ''' + return data + + @staticmethod + def nodecode(data): + ''' + Do no decoding. + + :param str data: Data. + :return: The data passed in is returned unmodified. + :rtype: str + ''' + return data + + +class QueuePermissions(object): + ''' + QueuePermissions class to be used with :func:`~azure.storage.queue.queueservice.QueueService.generate_queue_shared_access_signature` + method and for the AccessPolicies used with :func:`~azure.storage.queue.queueservice.QueueService.set_queue_acl`. + + :ivar QueuePermissions QueuePermissions.READ: + Read metadata and properties, including message count. Peek at messages. + :ivar QueuePermissions QueuePermissions.ADD: + Add messages to the queue. + :ivar QueuePermissions QueuePermissions.UPDATE: + Update messages in the queue. Note: Use the Process permission with + Update so you can first get the message you want to update. + :ivar QueuePermissions QueuePermissions.PROCESS: Delete entities. + Get and delete messages from the queue. + ''' + + def __init__(self, read=False, add=False, update=False, process=False, _str=None): + ''' + :param bool read: + Read metadata and properties, including message count. Peek at messages. + :param bool add: + Add messages to the queue. + :param bool update: + Update messages in the queue. Note: Use the Process permission with + Update so you can first get the message you want to update. + :param bool process: + Get and delete messages from the queue. + :param str _str: + A string representing the permissions. + ''' + if not _str: + _str = '' + self.read = read or ('r' in _str) + self.add = add or ('a' in _str) + self.update = update or ('u' in _str) + self.process = process or ('p' in _str) + + def __or__(self, other): + return QueuePermissions(_str=str(self) + str(other)) + + def __add__(self, other): + return QueuePermissions(_str=str(self) + str(other)) + + def __str__(self): + return (('r' if self.read else '') + + ('a' if self.add else '') + + ('u' if self.update else '') + + ('p' if self.process else '')) + + +QueuePermissions.READ = QueuePermissions(read=True) +QueuePermissions.ADD = QueuePermissions(add=True) +QueuePermissions.UPDATE = QueuePermissions(update=True) +QueuePermissions.PROCESS = QueuePermissions(process=True) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/queueservice.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/queueservice.py new file mode 100644 index 00000000000..6bd1903013c --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/queueservice.py @@ -0,0 +1,996 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from azure.common import ( + AzureConflictHttpError, + AzureHttpError, +) + +from ..common._auth import ( + _StorageSASAuthentication, + _StorageSharedKeyAuthentication, + _StorageTokenAuthentication, +) +from ..common._common_conversion import ( + _int_to_str, + _to_str, +) +from ..common._connection import _ServiceParameters +from ..common._constants import ( + SERVICE_HOST_BASE, + DEFAULT_PROTOCOL, +) +from ..common._deserialization import ( + _convert_xml_to_service_properties, + _convert_xml_to_signed_identifiers, + _convert_xml_to_service_stats, +) +from ..common._error import ( + _dont_fail_not_exist, + _dont_fail_on_exist, + _validate_not_none, + _ERROR_CONFLICT, + _ERROR_STORAGE_MISSING_INFO, + _validate_access_policies, + _validate_encryption_required, + _validate_decryption_required, +) +from ..common._http import ( + HTTPRequest, +) +from ..common._serialization import ( + _convert_signed_identifiers_to_xml, + _convert_service_properties_to_xml, +) +from ..common._serialization import ( + _get_request_body, + _add_metadata_headers, +) +from ..common.models import ( + Services, + ListGenerator, + _OperationContext, +) +from .sharedaccesssignature import ( + QueueSharedAccessSignature, +) +from ..common.storageclient import StorageClient +from ._deserialization import ( + _convert_xml_to_queues, + _convert_xml_to_queue_messages, + _parse_queue_message_from_headers, + _parse_metadata_and_message_count, +) +from ._serialization import ( + _convert_queue_message_xml, + _get_path, +) +from .models import ( + QueueMessageFormat, +) +from ._constants import ( + X_MS_VERSION, + __version__ as package_version, +) + +_HTTP_RESPONSE_NO_CONTENT = 204 + + +class QueueService(StorageClient): + ''' + This is the main class managing queue resources. + + The Queue service stores messages. A queue can contain an unlimited number of + messages, each of which can be up to 64KB in size. Messages are generally added + to the end of the queue and retrieved from the front of the queue, although + first in, first out (FIFO) behavior is not guaranteed. + + :ivar function(data) encode_function: + A function used to encode queue messages. Takes as + a parameter the data passed to the put_message API and returns the encoded + message. Defaults to take text and xml encode, but bytes and other + encodings can be used. For example, base64 may be preferable for developing + across multiple Azure Storage libraries in different languages. See the + :class:`~azure.storage.queue.models.QueueMessageFormat` for xml, base64 and + no encoding methods as well as binary equivalents. + :ivar function(data) decode_function: + A function used to encode decode messages. Takes as + a parameter the data returned by the get_messages and peek_messages APIs and + returns the decoded message. Defaults to return text and xml decode, but + bytes and other decodings can be used. For example, base64 may be preferable + for developing across multiple Azure Storage libraries in different languages. + See the :class:`~azure.storage.queue.models.QueueMessageFormat` for xml, base64 + and no decoding methods as well as binary equivalents. + :ivar object key_encryption_key: + The key-encryption-key optionally provided by the user. If provided, will be used to + encrypt/decrypt in supported methods. + For methods requiring decryption, either the key_encryption_key OR the resolver must be provided. + If both are provided, the resolver will take precedence. + Must implement the following methods for APIs requiring encryption: + wrap_key(key)--wraps the specified key (bytes) using an algorithm of the user's choice. Returns the encrypted key as bytes. + get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key. + get_kid()--returns a string key id for this key-encryption-key. + Must implement the following methods for APIs requiring decryption: + unwrap_key(key, algorithm)--returns the unwrapped form of the specified symmetric key using the string-specified algorithm. + get_kid()--returns a string key id for this key-encryption-key. + :ivar function key_resolver_function(kid): + A function to resolve keys optionally provided by the user. If provided, will be used to decrypt in supported methods. + For methods requiring decryption, either the key_encryption_key OR + the resolver must be provided. If both are provided, the resolver will take precedence. + It uses the kid string to return a key-encryption-key implementing the interface defined above. + :ivar bool require_encryption: + A flag that may be set to ensure that all messages successfully uploaded to the queue and all those downloaded and + successfully read from the queue are/were encrypted while on the server. If this flag is set, all required + parameters for encryption/decryption must be provided. See the above comments on the key_encryption_key and resolver. + ''' + + def __init__(self, account_name=None, account_key=None, sas_token=None, is_emulated=False, + protocol=DEFAULT_PROTOCOL, endpoint_suffix=SERVICE_HOST_BASE, request_session=None, + connection_string=None, socket_timeout=None, token_credential=None): + ''' + :param str account_name: + The storage account name. This is used to authenticate requests + signed with an account key and to construct the storage endpoint. It + is required unless a connection string is given. + :param str account_key: + The storage account key. This is used for shared key authentication. + :param str sas_token: + A shared access signature token to use to authenticate requests + instead of the account key. If account key and sas token are both + specified, account key will be used to sign. + :param bool is_emulated: + Whether to use the emulator. Defaults to False. If specified, will + override all other parameters besides connection string and request + session. + :param str protocol: + The protocol to use for requests. Defaults to https. + :param str endpoint_suffix: + The host base component of the url, minus the account name. Defaults + to Azure (core.windows.net). Override this to use the China cloud + (core.chinacloudapi.cn). + :param requests.Session request_session: + The session object to use for http requests. + :param str connection_string: + If specified, this will override all other parameters besides + request session. See + http://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/ + for the connection string format. + :param int socket_timeout: + If specified, this will override the default socket timeout. The timeout specified is in seconds. + See DEFAULT_SOCKET_TIMEOUT in _constants.py for the default value. + :param token_credential: + A token credential used to authenticate HTTPS requests. The token value + should be updated before its expiration. + :type `~..common.TokenCredential` + ''' + service_params = _ServiceParameters.get_service_parameters( + 'queue', + account_name=account_name, + account_key=account_key, + sas_token=sas_token, + token_credential=token_credential, + is_emulated=is_emulated, + protocol=protocol, + endpoint_suffix=endpoint_suffix, + request_session=request_session, + connection_string=connection_string, + socket_timeout=socket_timeout) + + super(QueueService, self).__init__(service_params) + + if self.account_key: + self.authentication = _StorageSharedKeyAuthentication( + self.account_name, + self.account_key, + self.is_emulated + ) + elif self.sas_token: + self.authentication = _StorageSASAuthentication(self.sas_token) + elif self.token_credential: + self.authentication = _StorageTokenAuthentication(self.token_credential) + else: + raise ValueError(_ERROR_STORAGE_MISSING_INFO) + + self.encode_function = QueueMessageFormat.text_xmlencode + self.decode_function = QueueMessageFormat.text_xmldecode + self.key_encryption_key = None + self.key_resolver_function = None + self.require_encryption = False + self._X_MS_VERSION = X_MS_VERSION + self._update_user_agent_string(package_version) + + def generate_account_shared_access_signature(self, resource_types, permission, + expiry, start=None, ip=None, protocol=None): + ''' + Generates a shared access signature for the queue service. + Use the returned signature with the sas_token parameter of QueueService. + + :param ResourceTypes resource_types: + Specifies the resource types that are accessible with the account SAS. + :param AccountPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + :return: A Shared Access Signature (sas) token. + :rtype: str + ''' + _validate_not_none('self.account_name', self.account_name) + _validate_not_none('self.account_key', self.account_key) + + sas = QueueSharedAccessSignature(self.account_name, self.account_key) + return sas.generate_account(Services.QUEUE, resource_types, permission, + expiry, start=start, ip=ip, protocol=protocol) + + def generate_queue_shared_access_signature(self, queue_name, + permission=None, + expiry=None, + start=None, + id=None, + ip=None, protocol=None, ): + ''' + Generates a shared access signature for the queue. + Use the returned signature with the sas_token parameter of QueueService. + + :param str queue_name: + The name of the queue to create a SAS token for. + :param QueuePermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use :func:`~set_queue_acl`. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip='168.1.5.65' or sip='168.1.5.60-168.1.5.70' on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + :return: A Shared Access Signature (sas) token. + :rtype: str + ''' + _validate_not_none('queue_name', queue_name) + _validate_not_none('self.account_name', self.account_name) + _validate_not_none('self.account_key', self.account_key) + + sas = QueueSharedAccessSignature(self.account_name, self.account_key) + return sas.generate_queue( + queue_name, + permission=permission, + expiry=expiry, + start=start, + id=id, + ip=ip, + protocol=protocol, + ) + + def get_queue_service_stats(self, timeout=None): + ''' + Retrieves statistics related to replication for the Queue service. It is + only available when read-access geo-redundant replication is enabled for + the storage account. + + With geo-redundant replication, Azure Storage maintains your data durable + in two locations. In both locations, Azure Storage constantly maintains + multiple healthy replicas of your data. The location where you read, + create, update, or delete data is the primary storage account location. + The primary location exists in the region you choose at the time you + create an account via the Azure Management Azure classic portal, for + example, North Central US. The location to which your data is replicated + is the secondary location. The secondary location is automatically + determined based on the location of the primary; it is in a second data + center that resides in the same region as the primary location. Read-only + access is available from the secondary location, if read-access geo-redundant + replication is enabled for your storage account. + + :param int timeout: + The timeout parameter is expressed in seconds. + :return: The queue service stats. + :rtype: :class:`~..common.models.ServiceStats` + ''' + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(primary=False, secondary=True) + request.path = _get_path() + request.query = { + 'restype': 'service', + 'comp': 'stats', + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_service_stats) + + def get_queue_service_properties(self, timeout=None): + ''' + Gets the properties of a storage account's Queue service, including + logging, analytics and CORS rules. + + :param int timeout: + The server timeout, expressed in seconds. + :return: The queue service properties. + :rtype: :class:`~..common.models.ServiceProperties` + ''' + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path() + request.query = { + 'restype': 'service', + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_service_properties) + + def set_queue_service_properties(self, logging=None, hour_metrics=None, + minute_metrics=None, cors=None, timeout=None): + ''' + Sets the properties of a storage account's Queue service, including + Azure Storage Analytics. If an element (ex Logging) is left as None, the + existing settings on the service for that functionality are preserved. + For more information on Azure Storage Analytics, see + https://msdn.microsoft.com/en-us/library/azure/hh343270.aspx. + + :param Logging logging: + The logging settings provide request logs. + :param Metrics hour_metrics: + The hour metrics settings provide a summary of request + statistics grouped by API in hourly aggregates for queuess. + :param Metrics minute_metrics: + The minute metrics settings provide request statistics + for each minute for queues. + :param cors: + You can include up to five CorsRule elements in the + list. If an empty list is specified, all CORS rules will be deleted, + and CORS will be disabled for the service. For detailed information + about CORS rules and evaluation logic, see + https://msdn.microsoft.com/en-us/library/azure/dn535601.aspx. + :type cors: list(:class:`~..common.models.CorsRule`) + :param int timeout: + The server timeout, expressed in seconds. + ''' + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path() + request.query = { + 'restype': 'service', + 'comp': 'properties', + 'timeout': _int_to_str(timeout), + } + request.body = _get_request_body( + _convert_service_properties_to_xml(logging, hour_metrics, minute_metrics, cors)) + self._perform_request(request) + + def list_queues(self, prefix=None, num_results=None, include_metadata=False, + marker=None, timeout=None): + ''' + Returns a generator to list the queues. The generator will lazily follow + the continuation tokens returned by the service and stop when all queues + have been returned or num_results is reached. + + If num_results is specified and the account has more than that number of + queues, the generator will have a populated next_marker field once it + finishes. This marker can be used to create a new generator if more + results are desired. + + :param str prefix: + Filters the results to return only queues with names that begin + with the specified prefix. + :param int num_results: + The maximum number of queues to return. + :param bool include_metadata: + Specifies that container metadata be returned in the response. + :param str marker: + An opaque continuation token. This value can be retrieved from the + next_marker field of a previous generator object if num_results was + specified and that generator has finished enumerating results. If + specified, this generator will begin returning results from the point + where the previous generator stopped. + :param int timeout: + The server timeout, expressed in seconds. This function may make multiple + calls to the service in which case the timeout value specified will be + applied to each individual call. + ''' + include = 'metadata' if include_metadata else None + operation_context = _OperationContext(location_lock=True) + kwargs = {'prefix': prefix, 'max_results': num_results, 'include': include, + 'marker': marker, 'timeout': timeout, '_context': operation_context} + resp = self._list_queues(**kwargs) + + return ListGenerator(resp, self._list_queues, (), kwargs) + + def _list_queues(self, prefix=None, marker=None, max_results=None, + include=None, timeout=None, _context=None): + ''' + Returns a list of queues under the specified account. Makes a single list + request to the service. Used internally by the list_queues method. + + :param str prefix: + Filters the results to return only queues with names that begin + with the specified prefix. + :param str marker: + A token which identifies the portion of the query to be + returned with the next query operation. The operation returns a + next_marker element within the response body if the list returned + was not complete. This value may then be used as a query parameter + in a subsequent call to request the next portion of the list of + queues. The marker value is opaque to the client. + :param int max_results: + The maximum number of queues to return. A single list request may + return up to 1000 queues and potentially a continuation token which + should be followed to get additional resutls. + :param str include: + Include this parameter to specify that the container's + metadata be returned as part of the response body. + :param int timeout: + The server timeout, expressed in seconds. + ''' + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path() + request.query = { + 'comp': 'list', + 'prefix': _to_str(prefix), + 'marker': _to_str(marker), + 'maxresults': _int_to_str(max_results), + 'include': _to_str(include), + 'timeout': _int_to_str(timeout) + } + + return self._perform_request(request, _convert_xml_to_queues, operation_context=_context) + + def create_queue(self, queue_name, metadata=None, fail_on_exist=False, timeout=None): + ''' + Creates a queue under the given account. + + :param str queue_name: + The name of the queue to create. A queue name must be from 3 through + 63 characters long and may only contain lowercase letters, numbers, + and the dash (-) character. The first and last letters in the queue + must be alphanumeric. The dash (-) character cannot be the first or + last character. Consecutive dash characters are not permitted in the + queue name. + :param metadata: + A dict containing name-value pairs to associate with the queue as + metadata. Note that metadata names preserve the case with which they + were created, but are case-insensitive when set or read. + :type metadata: dict(str, str) + :param bool fail_on_exist: + Specifies whether to throw an exception if the queue already exists. + :param int timeout: + The server timeout, expressed in seconds. + :return: + A boolean indicating whether the queue was created. If fail_on_exist + was set to True, this will throw instead of returning false. + :rtype: bool + ''' + _validate_not_none('queue_name', queue_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(queue_name) + request.query = {'timeout': _int_to_str(timeout)} + _add_metadata_headers(metadata, request) + + def _return_request(request): + return request + + if not fail_on_exist: + try: + response = self._perform_request(request, parser=_return_request) + if response.status == _HTTP_RESPONSE_NO_CONTENT: + return False + return True + except AzureHttpError as ex: + _dont_fail_on_exist(ex) + return False + else: + response = self._perform_request(request, parser=_return_request) + if response.status == _HTTP_RESPONSE_NO_CONTENT: + raise AzureConflictHttpError( + _ERROR_CONFLICT.format(response.message), response.status) + return True + + def delete_queue(self, queue_name, fail_not_exist=False, timeout=None): + ''' + Deletes the specified queue and any messages it contains. + + When a queue is successfully deleted, it is immediately marked for deletion + and is no longer accessible to clients. The queue is later removed from + the Queue service during garbage collection. + + Note that deleting a queue is likely to take at least 40 seconds to complete. + If an operation is attempted against the queue while it was being deleted, + an :class:`AzureConflictHttpError` will be thrown. + + :param str queue_name: + The name of the queue to delete. + :param bool fail_not_exist: + Specifies whether to throw an exception if the queue doesn't exist. + :param int timeout: + The server timeout, expressed in seconds. + :return: + A boolean indicating whether the queue was deleted. If fail_not_exist + was set to True, this will throw instead of returning false. + :rtype: bool + ''' + _validate_not_none('queue_name', queue_name) + request = HTTPRequest() + request.method = 'DELETE' + request.host_locations = self._get_host_locations() + request.path = _get_path(queue_name) + request.query = {'timeout': _int_to_str(timeout)} + if not fail_not_exist: + try: + self._perform_request(request) + return True + except AzureHttpError as ex: + _dont_fail_not_exist(ex) + return False + else: + self._perform_request(request) + return True + + def get_queue_metadata(self, queue_name, timeout=None): + ''' + Retrieves user-defined metadata and queue properties on the specified + queue. Metadata is associated with the queue as name-value pairs. + + :param str queue_name: + The name of an existing queue. + :param int timeout: + The server timeout, expressed in seconds. + :return: + A dictionary representing the queue metadata with an + approximate_message_count int property on the dict estimating the + number of messages in the queue. + :rtype: dict(str, str) + ''' + _validate_not_none('queue_name', queue_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(queue_name) + request.query = { + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _parse_metadata_and_message_count) + + def set_queue_metadata(self, queue_name, metadata=None, timeout=None): + ''' + Sets user-defined metadata on the specified queue. Metadata is + associated with the queue as name-value pairs. + + :param str queue_name: + The name of an existing queue. + :param dict metadata: + A dict containing name-value pairs to associate with the + queue as metadata. + :param int timeout: + The server timeout, expressed in seconds. + ''' + _validate_not_none('queue_name', queue_name) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(queue_name) + request.query = { + 'comp': 'metadata', + 'timeout': _int_to_str(timeout), + } + _add_metadata_headers(metadata, request) + + self._perform_request(request) + + def exists(self, queue_name, timeout=None): + ''' + Returns a boolean indicating whether the queue exists. + + :param str queue_name: + The name of queue to check for existence. + :param int timeout: + The server timeout, expressed in seconds. + :return: A boolean indicating whether the queue exists. + :rtype: bool + ''' + try: + self.get_queue_metadata(queue_name, timeout=timeout) + return True + except AzureHttpError as ex: + _dont_fail_not_exist(ex) + return False + + def get_queue_acl(self, queue_name, timeout=None): + ''' + Returns details about any stored access policies specified on the + queue that may be used with Shared Access Signatures. + + :param str queue_name: + The name of an existing queue. + :param int timeout: + The server timeout, expressed in seconds. + :return: A dictionary of access policies associated with the queue. + :rtype: dict(str, :class:`~..common.models.AccessPolicy`) + ''' + _validate_not_none('queue_name', queue_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(queue_name) + request.query = { + 'comp': 'acl', + 'timeout': _int_to_str(timeout), + } + + return self._perform_request(request, _convert_xml_to_signed_identifiers) + + def set_queue_acl(self, queue_name, signed_identifiers=None, timeout=None): + ''' + Sets stored access policies for the queue that may be used with Shared + Access Signatures. + + When you set permissions for a queue, the existing permissions are replaced. + To update the queue's permissions, call :func:`~get_queue_acl` to fetch + all access policies associated with the queue, modify the access policy + that you wish to change, and then call this function with the complete + set of data to perform the update. + + When you establish a stored access policy on a queue, it may take up to + 30 seconds to take effect. During this interval, a shared access signature + that is associated with the stored access policy will throw an + :class:`AzureHttpError` until the access policy becomes active. + + :param str queue_name: + The name of an existing queue. + :param signed_identifiers: + A dictionary of access policies to associate with the queue. The + dictionary may contain up to 5 elements. An empty dictionary + will clear the access policies set on the service. + :type signed_identifiers: dict(str, :class:`~..common.models.AccessPolicy`) + :param int timeout: + The server timeout, expressed in seconds. + ''' + _validate_not_none('queue_name', queue_name) + _validate_access_policies(signed_identifiers) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(queue_name) + request.query = { + 'comp': 'acl', + 'timeout': _int_to_str(timeout), + } + request.body = _get_request_body( + _convert_signed_identifiers_to_xml(signed_identifiers)) + self._perform_request(request) + + def put_message(self, queue_name, content, visibility_timeout=None, + time_to_live=None, timeout=None): + ''' + Adds a new message to the back of the message queue. + + The visibility timeout specifies the time that the message will be + invisible. After the timeout expires, the message will become visible. + If a visibility timeout is not specified, the default value of 0 is used. + + The message time-to-live specifies how long a message will remain in the + queue. The message will be deleted from the queue when the time-to-live + period expires. + + If the key-encryption-key field is set on the local service object, this method will + encrypt the content before uploading. + + :param str queue_name: + The name of the queue to put the message into. + :param obj content: + Message content. Allowed type is determined by the encode_function + set on the service. Default is str. The encoded message can be up to + 64KB in size. + :param int visibility_timeout: + If not specified, the default value is 0. Specifies the + new visibility timeout value, in seconds, relative to server time. + The value must be larger than or equal to 0, and cannot be + larger than 7 days. The visibility timeout of a message cannot be + set to a value later than the expiry time. visibility_timeout + should be set to a value smaller than the time-to-live value. + :param int time_to_live: + Specifies the time-to-live interval for the message, in + seconds. The time-to-live may be any positive number or -1 for infinity. If this + parameter is omitted, the default time-to-live is 7 days. + :param int timeout: + The server timeout, expressed in seconds. + :return: + A :class:`~azure.storage.queue.models.QueueMessage` object. + This object is also populated with the content although it is not + returned from the service. + :rtype: :class:`~azure.storage.queue.models.QueueMessage` + ''' + + _validate_encryption_required(self.require_encryption, self.key_encryption_key) + + _validate_not_none('queue_name', queue_name) + _validate_not_none('content', content) + request = HTTPRequest() + request.method = 'POST' + request.host_locations = self._get_host_locations() + request.path = _get_path(queue_name, True) + request.query = { + 'visibilitytimeout': _to_str(visibility_timeout), + 'messagettl': _to_str(time_to_live), + 'timeout': _int_to_str(timeout) + } + + request.body = _get_request_body(_convert_queue_message_xml(content, self.encode_function, + self.key_encryption_key)) + + message_list = self._perform_request(request, _convert_xml_to_queue_messages, + [self.decode_function, False, + None, None, content]) + return message_list[0] + + def get_messages(self, queue_name, num_messages=None, + visibility_timeout=None, timeout=None): + ''' + Retrieves one or more messages from the front of the queue. + + When a message is retrieved from the queue, the response includes the message + content and a pop_receipt value, which is required to delete the message. + The message is not automatically deleted from the queue, but after it has + been retrieved, it is not visible to other clients for the time interval + specified by the visibility_timeout parameter. + + If the key-encryption-key or resolver field is set on the local service object, the messages will be + decrypted before being returned. + + :param str queue_name: + The name of the queue to get messages from. + :param int num_messages: + A nonzero integer value that specifies the number of + messages to retrieve from the queue, up to a maximum of 32. If + fewer are visible, the visible messages are returned. By default, + a single message is retrieved from the queue with this operation. + :param int visibility_timeout: + Specifies the new visibility timeout value, in seconds, relative + to server time. The new value must be larger than or equal to 1 + second, and cannot be larger than 7 days. The visibility timeout of + a message can be set to a value later than the expiry time. + :param int timeout: + The server timeout, expressed in seconds. + :return: A :class:`~azure.storage.queue.models.QueueMessage` object representing the information passed. + :rtype: list(:class:`~azure.storage.queue.models.QueueMessage`) + ''' + _validate_decryption_required(self.require_encryption, self.key_encryption_key, + self.key_resolver_function) + + _validate_not_none('queue_name', queue_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations() + request.path = _get_path(queue_name, True) + request.query = { + 'numofmessages': _to_str(num_messages), + 'visibilitytimeout': _to_str(visibility_timeout), + 'timeout': _int_to_str(timeout) + } + + return self._perform_request(request, _convert_xml_to_queue_messages, + [self.decode_function, self.require_encryption, + self.key_encryption_key, self.key_resolver_function]) + + def peek_messages(self, queue_name, num_messages=None, timeout=None): + ''' + Retrieves one or more messages from the front of the queue, but does + not alter the visibility of the message. + + Only messages that are visible may be retrieved. When a message is retrieved + for the first time with a call to get_messages, its dequeue_count property + is set to 1. If it is not deleted and is subsequently retrieved again, the + dequeue_count property is incremented. The client may use this value to + determine how many times a message has been retrieved. Note that a call + to peek_messages does not increment the value of DequeueCount, but returns + this value for the client to read. + + If the key-encryption-key or resolver field is set on the local service object, the messages will be + decrypted before being returned. + + :param str queue_name: + The name of the queue to peek messages from. + :param int num_messages: + A nonzero integer value that specifies the number of + messages to peek from the queue, up to a maximum of 32. By default, + a single message is peeked from the queue with this operation. + :param int timeout: + The server timeout, expressed in seconds. + :return: + A list of :class:`~azure.storage.queue.models.QueueMessage` objects. Note that + time_next_visible and pop_receipt will not be populated as peek does + not pop the message and can only retrieve already visible messages. + :rtype: list(:class:`~azure.storage.queue.models.QueueMessage`) + ''' + + _validate_decryption_required(self.require_encryption, self.key_encryption_key, + self.key_resolver_function) + + _validate_not_none('queue_name', queue_name) + request = HTTPRequest() + request.method = 'GET' + request.host_locations = self._get_host_locations(secondary=True) + request.path = _get_path(queue_name, True) + request.query = { + 'peekonly': 'true', + 'numofmessages': _to_str(num_messages), + 'timeout': _int_to_str(timeout) + } + + return self._perform_request(request, _convert_xml_to_queue_messages, + [self.decode_function, self.require_encryption, + self.key_encryption_key, self.key_resolver_function]) + + def delete_message(self, queue_name, message_id, pop_receipt, timeout=None): + ''' + Deletes the specified message. + + Normally after a client retrieves a message with the get_messages operation, + the client is expected to process and delete the message. To delete the + message, you must have two items of data: id and pop_receipt. The + id is returned from the previous get_messages operation. The + pop_receipt is returned from the most recent :func:`~get_messages` or + :func:`~update_message` operation. In order for the delete_message operation + to succeed, the pop_receipt specified on the request must match the + pop_receipt returned from the :func:`~get_messages` or :func:`~update_message` + operation. + + :param str queue_name: + The name of the queue from which to delete the message. + :param str message_id: + The message id identifying the message to delete. + :param str pop_receipt: + A valid pop receipt value returned from an earlier call + to the :func:`~get_messages` or :func:`~update_message`. + :param int timeout: + The server timeout, expressed in seconds. + ''' + _validate_not_none('queue_name', queue_name) + _validate_not_none('message_id', message_id) + _validate_not_none('pop_receipt', pop_receipt) + request = HTTPRequest() + request.method = 'DELETE' + request.host_locations = self._get_host_locations() + request.path = _get_path(queue_name, True, message_id) + request.query = { + 'popreceipt': _to_str(pop_receipt), + 'timeout': _int_to_str(timeout) + } + self._perform_request(request) + + def clear_messages(self, queue_name, timeout=None): + ''' + Deletes all messages from the specified queue. + + :param str queue_name: + The name of the queue whose messages to clear. + :param int timeout: + The server timeout, expressed in seconds. + ''' + _validate_not_none('queue_name', queue_name) + request = HTTPRequest() + request.method = 'DELETE' + request.host_locations = self._get_host_locations() + request.path = _get_path(queue_name, True) + request.query = {'timeout': _int_to_str(timeout)} + self._perform_request(request) + + def update_message(self, queue_name, message_id, pop_receipt, visibility_timeout, + content=None, timeout=None): + ''' + Updates the visibility timeout of a message. You can also use this + operation to update the contents of a message. + + This operation can be used to continually extend the invisibility of a + queue message. This functionality can be useful if you want a worker role + to "lease" a queue message. For example, if a worker role calls get_messages + and recognizes that it needs more time to process a message, it can + continually extend the message's invisibility until it is processed. If + the worker role were to fail during processing, eventually the message + would become visible again and another worker role could process it. + + If the key-encryption-key field is set on the local service object, this method will + encrypt the content before uploading. + + :param str queue_name: + The name of the queue containing the message to update. + :param str message_id: + The message id identifying the message to update. + :param str pop_receipt: + A valid pop receipt value returned from an earlier call + to the :func:`~get_messages` or :func:`~update_message` operation. + :param int visibility_timeout: + Specifies the new visibility timeout value, in seconds, + relative to server time. The new value must be larger than or equal + to 0, and cannot be larger than 7 days. The visibility timeout of a + message cannot be set to a value later than the expiry time. A + message can be updated until it has been deleted or has expired. + :param obj content: + Message content. Allowed type is determined by the encode_function + set on the service. Default is str. + :param int timeout: + The server timeout, expressed in seconds. + :return: + A list of :class:`~azure.storage.queue.models.QueueMessage` objects. For convenience, + this object is also populated with the content, although it is not returned by the service. + :rtype: list(:class:`~azure.storage.queue.models.QueueMessage`) + ''' + + _validate_encryption_required(self.require_encryption, self.key_encryption_key) + + _validate_not_none('queue_name', queue_name) + _validate_not_none('message_id', message_id) + _validate_not_none('pop_receipt', pop_receipt) + _validate_not_none('visibility_timeout', visibility_timeout) + request = HTTPRequest() + request.method = 'PUT' + request.host_locations = self._get_host_locations() + request.path = _get_path(queue_name, True, message_id) + request.query = { + 'popreceipt': _to_str(pop_receipt), + 'visibilitytimeout': _int_to_str(visibility_timeout), + 'timeout': _int_to_str(timeout) + } + + if content is not None: + request.body = _get_request_body(_convert_queue_message_xml(content, self.encode_function, + self.key_encryption_key)) + + return self._perform_request(request, _parse_queue_message_from_headers) diff --git a/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/sharedaccesssignature.py b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/sharedaccesssignature.py new file mode 100644 index 00000000000..1cf585a48b6 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/vendored_sdks/azure_storage/v2017_11_09/queue/sharedaccesssignature.py @@ -0,0 +1,81 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +from ..common.sharedaccesssignature import ( + SharedAccessSignature, + _SharedAccessHelper, +) +from ._constants import X_MS_VERSION + + +class QueueSharedAccessSignature(SharedAccessSignature): + ''' + Provides a factory for creating queue shares access + signature tokens with a common account name and account key. Users can either + use the factory or can construct the appropriate service and use the + generate_*_shared_access_signature method directly. + ''' + + def __init__(self, account_name, account_key): + ''' + :param str account_name: + The storage account name used to generate the shared access signatures. + :param str account_key: + The access key to generate the shares access signatures. + ''' + super(QueueSharedAccessSignature, self).__init__(account_name, account_key, x_ms_version=X_MS_VERSION) + + def generate_queue(self, queue_name, permission=None, + expiry=None, start=None, id=None, + ip=None, protocol=None): + ''' + Generates a shared access signature for the queue. + Use the returned signature with the sas_token parameter of QueueService. + + :param str queue_name: + Name of queue. + :param QueuePermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, add, update, process. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use + set_blob_service_properties. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~..common.models.Protocol` for possible values. + ''' + sas = _SharedAccessHelper() + sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) + sas.add_id(id) + sas.add_resource_signature(self.account_name, self.account_key, 'queue', queue_name) + + return sas.get_token()