コード例 #1
0
ファイル: commands.py プロジェクト: derekbekoe/azure-cli
def load_command_table(self, _):  # pylint: disable=too-many-locals, too-many-statements
    storage_account_sdk = CliCommandType(
        operations_tmpl='azure.mgmt.storage.operations.storage_accounts_operations#StorageAccountsOperations.{}',
        client_factory=cf_sa,
        resource_type=ResourceType.MGMT_STORAGE
    )

    storage_account_custom_type = CliCommandType(
        operations_tmpl='azure.cli.command_modules.storage.operations.account#{}',
        client_factory=cf_sa)

    cloud_data_plane_sdk = CliCommandType(
        operations_tmpl='azure.multiapi.storage.common#CloudStorageAccount.{}',
        client_factory=cloud_storage_account_service_factory
    )

    def get_custom_sdk(custom_module, client_factory, resource_type=ResourceType.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."""
        return CliCommandType(
            operations_tmpl='azure.cli.command_modules.storage.operations.{}#'.format(custom_module) + '{}',
            client_factory=client_factory,
            resource_type=resource_type
        )

    with self.command_group('storage account', storage_account_sdk, resource_type=ResourceType.MGMT_STORAGE,
                            custom_command_type=storage_account_custom_type) as g:
        g.command('check-name', 'check_name_availability')
        g.custom_command('create', 'create_storage_account', min_api='2016-01-01')
        g.command('delete', 'delete', confirmation=True)
        g.command('show', 'get_properties', exception_handler=g.get_handler_suppress_404())
        g.custom_command('list', 'list_storage_accounts')
        g.custom_command('show-usage', 'show_storage_account_usage')
        g.custom_command('show-connection-string', 'show_storage_account_connection_string')
        g.generic_update_command('update', getter_name='get_properties', setter_name='update',
                                 custom_func_name='update_storage_account', min_api='2016-12-01')
        g.command('keys renew', 'regenerate_key', transform=lambda x: getattr(x, 'keys', x))
        g.command('keys list', 'list_keys', transform=lambda x: getattr(x, 'keys', x))
        g.storage_command('generate-sas', 'generate_shared_access_signature', command_type=cloud_data_plane_sdk)

    with self.command_group('storage account network-rule', storage_account_sdk,
                            custom_command_type=storage_account_custom_type,
                            resource_type=ResourceType.MGMT_STORAGE, min_api='2017-06-01') as g:
        g.custom_command('add', 'add_network_rule')
        g.custom_command('list', 'list_network_rules')
        g.custom_command('remove', 'remove_network_rule')

    with self.command_group('storage logging', get_custom_sdk('logging', multi_service_properties_factory)) as g:
        from ._transformers import transform_logging_list_output
        g.storage_command('update', 'set_logging')
        g.storage_command('show', 'get_logging',
                          table_transformer=transform_logging_list_output,
                          exception_handler=g.get_handler_suppress_404())

    with self.command_group('storage metrics', get_custom_sdk('metrics', multi_service_properties_factory)) as g:
        from ._transformers import transform_metrics_list_output
        g.storage_command('update', 'set_metrics')
        g.storage_command('show', 'get_metrics',
                          table_transformer=transform_metrics_list_output,
                          exception_handler=g.get_handler_suppress_404())

    block_blob_sdk = CliCommandType(
        operations_tmpl='azure.multiapi.storage.blob.blockblobservice#BlockBlobService.{}',
        client_factory=blob_data_service_factory,
        resource_type=ResourceType.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)

    with self.command_group('storage blob', command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk('blob', blob_data_service_factory)) as g:
        from ._format import transform_boolean_for_table, transform_blob_output
        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')

    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,
                            min_api='2016-05-31') as g:
        g.storage_command('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,
                            min_api='2016-05-31') as g:
        g.storage_command('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')

    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())

    with self.command_group('storage container', command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk('acl', blob_data_service_factory)) as g:
        from azure.cli.command_modules.storage._transformers import (transform_storage_list_output,
                                                                     transform_container_permission_output,
                                                                     transform_acl_list_output)
        from azure.cli.command_modules.storage._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)

    file_sdk = CliCommandType(
        operations_tmpl='azure.multiapi.storage.file.fileservice#FileService.{}',
        client_factory=file_data_service_factory,
        resource_type=ResourceType.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:
        from ._format import (transform_share_list, transform_boolean_for_table)
        g.storage_command('list', 'list_shares', transform=transform_storage_list_output,
                          table_transformer=transform_share_list)
        g.storage_command('create', 'create_share', transform=create_boolean_result_output_transformer('created'),
                          table_transformer=transform_boolean_for_table)
        g.storage_command('delete', 'delete_share', transform=create_boolean_result_output_transformer('deleted'),
                          table_transformer=transform_boolean_for_table)
        g.storage_command('generate-sas', 'generate_share_shared_access_signature')
        g.storage_command('stats', 'get_share_stats')
        g.storage_command('show', 'get_share_properties', exception_handler=g.get_handler_suppress_404())
        g.storage_command('update', 'set_share_properties')
        g.storage_command('snapshot', 'snapshot_share', min_api='2017-04-17')
        g.storage_command('exists', 'exists', transform=create_boolean_result_output_transformer('exists'))

        g.storage_command('metadata show', 'get_share_metadata', exception_handler=g.get_handler_suppress_404())
        g.storage_command('metadata update', 'set_share_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')
        g.storage_custom_command('policy list', 'list_acl_policies', table_transformer=transform_acl_list_output)
        g.storage_custom_command('policy update', 'set_acl_policy')

    with self.command_group('storage directory', command_type=file_sdk,
                            custom_command_type=get_custom_sdk('directory', file_data_service_factory)) as g:
        from ._format import transform_file_directory_result, transform_file_output

        g.storage_command('create', 'create_directory', transform=create_boolean_result_output_transformer('created'),
                          table_transformer=transform_boolean_for_table)
        g.storage_command('delete', 'delete_directory', transform=create_boolean_result_output_transformer('deleted'),
                          table_transformer=transform_boolean_for_table)
        g.storage_command('show', 'get_directory_properties', table_transformer=transform_file_output,
                          exception_handler=g.get_handler_suppress_404())
        g.storage_command('exists', 'exists', transform=create_boolean_result_output_transformer('exists'))
        g.storage_command('metadata show', 'get_directory_metadata', exception_handler=g.get_handler_suppress_404())
        g.storage_command('metadata update', 'set_directory_metadata')
        g.storage_custom_command('list', 'list_share_directories',
                                 transform=transform_file_directory_result(self.cli_ctx),
                                 table_transformer=transform_file_output,
                                 doc_string_source='file#FileService.list_directories_and_files')

    with self.command_group('storage file', command_type=file_sdk,
                            custom_command_type=get_custom_sdk('file', file_data_service_factory)) as g:
        from ._format import transform_file_directory_result, transform_boolean_for_table, transform_file_output
        from ._transformers import transform_url
        g.storage_custom_command('list', 'list_share_files', transform=transform_file_directory_result(self.cli_ctx),
                                 table_transformer=transform_file_output,
                                 doc_string_source='file#FileService.list_directories_and_files')
        g.storage_command('delete', 'delete_file', transform=create_boolean_result_output_transformer('deleted'),
                          table_transformer=transform_boolean_for_table)
        g.storage_command('resize', 'resize_file')
        g.storage_command('url', 'make_file_url', transform=transform_url)
        g.storage_command('generate-sas', 'generate_file_shared_access_signature')
        g.storage_command('show', 'get_file_properties', table_transformer=transform_file_output,
                          exception_handler=g.get_handler_suppress_404())
        g.storage_command('update', 'set_file_properties')
        g.storage_command('exists', 'exists', transform=create_boolean_result_output_transformer('exists'))
        g.storage_command('download', 'get_file_to_path')
        g.storage_command('upload', 'create_file_from_path')
        g.storage_command('metadata show', 'get_file_metadata', exception_handler=g.get_handler_suppress_404())
        g.storage_command('metadata update', 'set_file_metadata')
        g.storage_command('copy start', 'copy_file')
        g.storage_command('copy cancel', 'abort_copy_file')
        g.storage_custom_command('upload-batch', 'storage_file_upload_batch')
        g.storage_custom_command('download-batch', 'storage_file_download_batch')
        g.storage_custom_command('delete-batch', 'storage_file_delete_batch')
        g.storage_custom_command('copy start-batch', 'storage_file_copy_batch')

    with self.command_group('storage cors', get_custom_sdk('cors', multi_service_properties_factory)) as g:
        from ._transformers import transform_cors_list_output

        g.storage_command('add', 'add_cors')
        g.storage_command('clear', 'clear_cors')
        g.storage_command('list', 'list_cors', transform=transform_cors_list_output)

    queue_sdk = CliCommandType(operations_tmpl='azure.multiapi.storage.queue.queueservice#QueueService.{}',
                               client_factory=queue_data_service_factory,
                               resource_type=ResourceType.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('metadata show', 'get_queue_metadata', exception_handler=g.get_handler_suppress_404())
        g.storage_command('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')

    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')

    if cosmosdb_table_exists(self.cli_ctx):
        table_sdk = CliCommandType(operations_tmpl='azure.multiapi.cosmosdb.table.tableservice#TableService.{}',
                                   client_factory=table_data_service_factory,
                                   resource_type=ResourceType.DATA_COSMOS_TABLE)
    else:
        table_sdk = CliCommandType(operations_tmpl='azure.multiapi.storage.table.tableservice#TableService.{}',
                                   client_factory=table_data_service_factory,
                                   resource_type=ResourceType.DATA_COSMOS_TABLE)

    with self.command_group('storage table', table_sdk,
                            custom_command_type=get_custom_sdk('acl', table_data_service_factory)) as g:
        from ._format import transform_boolean_for_table
        from ._transformers import create_boolean_result_output_transformer

        g.storage_command('create', 'create_table', transform=create_boolean_result_output_transformer('created'),
                          table_transformer=transform_boolean_for_table)
        g.storage_command('delete', 'delete_table', transform=create_boolean_result_output_transformer('deleted'),
                          table_transformer=transform_boolean_for_table)
        g.storage_command('exists', 'exists', transform=create_boolean_result_output_transformer('exists'))
        g.storage_command('generate-sas', 'generate_table_shared_access_signature')
        g.storage_command('list', 'list_tables', transform=transform_storage_list_output)
        g.storage_command('stats', 'get_table_service_stats', min_api='2016-05-31')

        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')

    with self.command_group('storage entity', table_sdk,
                            custom_command_type=get_custom_sdk('table', table_data_service_factory)) as g:
        from ._format import transform_boolean_for_table, transform_entity_show
        from ._transformers import create_boolean_result_output_transformer, transform_entity_query_output

        g.storage_command('query', 'query_entities', table_transformer=transform_entity_query_output)
        g.storage_command('replace', 'update_entity')
        g.storage_command('merge', 'merge_entity')
        g.storage_command('delete', 'delete_entity', transform=create_boolean_result_output_transformer('deleted'),
                          table_transformer=transform_boolean_for_table)
        g.storage_command('show', 'get_entity', table_transformer=transform_entity_show,
                          exception_handler=g.get_handler_suppress_404())
        g.storage_custom_command('insert', 'insert_table_entity')
コード例 #2
0
def load_command_table(self, _):  # pylint: disable=too-many-locals, too-many-statements
    storage_account_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#StorageAccountsOperations.{}',
        client_factory=cf_sa,
        resource_type=ResourceType.MGMT_STORAGE)

    storage_account_custom_type = CliCommandType(
        operations_tmpl=
        'azure.cli.command_modules.storage.operations.account#{}',
        client_factory=cf_sa)

    cloud_data_plane_sdk = CliCommandType(
        operations_tmpl='azure.multiapi.storage.common#CloudStorageAccount.{}',
        client_factory=cloud_storage_account_service_factory)

    block_blob_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storage.blob.blockblobservice#BlockBlobService.{}',
        client_factory=blob_data_service_factory,
        resource_type=ResourceType.DATA_STORAGE)

    def get_custom_sdk(custom_module,
                       client_factory,
                       resource_type=ResourceType.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."""
        return CliCommandType(
            operations_tmpl='azure.cli.command_modules.storage.operations.{}#'.
            format(custom_module) + '{}',
            client_factory=client_factory,
            resource_type=resource_type)

    with self.command_group('storage',
                            command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk(
                                'azcopy', blob_data_service_factory)) as g:
        g.storage_custom_command_oauth('remove',
                                       'storage_remove',
                                       is_preview=True)

    with self.command_group('storage',
                            custom_command_type=get_custom_sdk('azcopy',
                                                               None)) as g:
        g.custom_command('copy', 'storage_copy', is_preview=True)

    with self.command_group(
            'storage account',
            storage_account_sdk,
            resource_type=ResourceType.MGMT_STORAGE,
            custom_command_type=storage_account_custom_type) as g:
        g.command('check-name', 'check_name_availability')
        g.custom_command('create', 'create_storage_account')
        g.command('delete', 'delete', confirmation=True)
        g.show_command('show', 'get_properties')
        g.custom_command('list', 'list_storage_accounts')
        g.custom_command('show-usage',
                         'show_storage_account_usage',
                         min_api='2018-02-01')
        g.custom_command('show-usage',
                         'show_storage_account_usage_no_location',
                         max_api='2017-10-01')
        g.custom_command('show-connection-string',
                         'show_storage_account_connection_string')
        g.generic_update_command('update',
                                 getter_name='get_properties',
                                 setter_name='update',
                                 custom_func_name='update_storage_account',
                                 min_api='2016-12-01')
        g.command('keys renew',
                  'regenerate_key',
                  transform=lambda x: getattr(x, 'keys', x))
        g.command('keys list',
                  'list_keys',
                  transform=lambda x: getattr(x, 'keys', x))
        g.command('revoke-delegation-keys',
                  'revoke_user_delegation_keys',
                  min_api='2019-04-01',
                  is_preview=True)

    with self.command_group('storage account', cloud_data_plane_sdk) as g:
        g.storage_command('generate-sas', 'generate_shared_access_signature')

    management_policy_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#ManagementPoliciesOperations.{}',
        client_factory=cf_mgmt_policy,
        resource_type=ResourceType.MGMT_STORAGE)

    management_policy_custom_type = CliCommandType(
        operations_tmpl=
        'azure.cli.command_modules.storage.operations.account#{}',
        client_factory=cf_mgmt_policy)

    with self.command_group(
            'storage account management-policy',
            management_policy_sdk,
            resource_type=ResourceType.MGMT_STORAGE,
            min_api='2018-11-01',
            custom_command_type=management_policy_custom_type) as g:
        g.show_command('show', 'get')
        g.custom_command('create', 'create_management_policies')
        g.generic_update_command('update',
                                 getter_name='get',
                                 setter_name='update_management_policies',
                                 setter_type=management_policy_custom_type)
        g.command('delete', 'delete')

    with self.command_group('storage account network-rule',
                            storage_account_sdk,
                            custom_command_type=storage_account_custom_type,
                            resource_type=ResourceType.MGMT_STORAGE,
                            min_api='2017-06-01') as g:
        g.custom_command('add', 'add_network_rule')
        g.custom_command('list', 'list_network_rules')
        g.custom_command('remove', 'remove_network_rule')

    with self.command_group(
            'storage logging',
            get_custom_sdk('logging', multi_service_properties_factory)) as g:
        from ._transformers import transform_logging_list_output
        g.storage_command('update', 'set_logging')
        g.storage_command('show',
                          'get_logging',
                          table_transformer=transform_logging_list_output,
                          exception_handler=show_exception_handler)

    with self.command_group(
            'storage metrics',
            get_custom_sdk('metrics', multi_service_properties_factory)) as g:
        from ._transformers import transform_metrics_list_output
        g.storage_command('update', 'set_metrics')
        g.storage_command('show',
                          'get_metrics',
                          table_transformer=transform_metrics_list_output,
                          exception_handler=show_exception_handler)

    base_blob_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storage.blob.baseblobservice#BaseBlobService.{}',
        client_factory=blob_data_service_factory,
        resource_type=ResourceType.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:
        from ._format import transform_boolean_for_table, transform_blob_output
        from ._transformers import (transform_storage_list_output,
                                    transform_url,
                                    create_boolean_result_output_transformer)
        from ._validators import (process_blob_download_batch_parameters,
                                  process_blob_delete_batch_parameters,
                                  process_blob_upload_batch_parameters)

        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',
                                table_transformer=transform_blob_output)
        g.storage_custom_command_oauth('generate-sas', 'generate_sas_blob_uri')
        g.storage_custom_command_oauth('url',
                                       'create_blob_url',
                                       transform=transform_url)
        g.storage_command_oauth('snapshot', 'snapshot_blob')
        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')
        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',
            validator=process_blob_upload_batch_parameters)
        g.storage_custom_command_oauth(
            'download-batch',
            'storage_blob_download_batch',
            validator=process_blob_download_batch_parameters)
        g.storage_custom_command_oauth(
            'delete-batch',
            'storage_blob_delete_batch',
            validator=process_blob_delete_batch_parameters)
        g.storage_custom_command_oauth(
            'show',
            'show_blob',
            table_transformer=transform_blob_output,
            client_factory=page_blob_service_factory,
            doc_string_source='blob#PageBlobService.get_blob_properties',
            exception_handler=show_exception_handler)

        g.storage_command_oauth('metadata show',
                                'get_blob_metadata',
                                exception_handler=show_exception_handler)
        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,
            min_api='2016-05-31') as g:
        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,
            min_api='2016-05-31') as g:
        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_oauth(
            'show',
            'get_blob_service_properties',
            transform=lambda x: getattr(x, 'delete_retention_policy', x),
            exception_handler=show_exception_handler)
        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_oauth('show',
                                'get_blob_service_properties',
                                exception_handler=show_exception_handler)
        g.storage_command_oauth('update',
                                generic_update=True,
                                getter_name='get_blob_service_properties',
                                setter_type=get_custom_sdk(
                                    'blob', cf_blob_data_gen_update),
                                setter_name='set_service_properties',
                                client_factory=cf_blob_data_gen_update)

    with self.command_group('storage blob',
                            command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk(
                                'azcopy', blob_data_service_factory)) as g:
        g.storage_custom_command_oauth('sync',
                                       'storage_blob_sync',
                                       is_preview=True)

    with self.command_group('storage container',
                            command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk(
                                'blob', blob_data_service_factory)) as g:
        from azure.cli.command_modules.storage._transformers import (
            transform_storage_list_output,
            transform_container_permission_output, transform_acl_list_output)
        from azure.cli.command_modules.storage._format import (
            transform_container_list, transform_boolean_for_table,
            transform_container_show)
        from ._validators import process_container_delete_parameters

        g.storage_command_oauth('list',
                                'list_containers',
                                transform=transform_storage_list_output,
                                table_transformer=transform_container_list)
        g.storage_custom_command_oauth(
            'delete',
            'delete_container',
            validator=process_container_delete_parameters,
            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=show_exception_handler)
        g.storage_command_oauth(
            'create',
            'create_container',
            transform=create_boolean_result_output_transformer('created'),
            table_transformer=transform_boolean_for_table)
        g.storage_custom_command_oauth(
            'generate-sas',
            'generate_container_shared_access_signature',
            min_api='2018-11-09')
        g.storage_command_oauth('generate-sas',
                                'generate_container_shared_access_signature',
                                max_api='2018-03-28')
        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=show_exception_handler)

        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')

    with self.command_group('storage container',
                            command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk(
                                'acl', blob_data_service_factory)) as g:
        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=show_exception_handler)
        g.storage_custom_command_oauth(
            'policy list',
            'list_acl_policies',
            table_transformer=transform_acl_list_output)

    blob_container_mgmt_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#BlobContainersOperations.{}',
        client_factory=cf_blob_container_mgmt,
        resource_type=ResourceType.MGMT_STORAGE)

    with self.command_group('storage container immutability-policy',
                            command_type=blob_container_mgmt_sdk,
                            min_api='2018-02-01') as g:
        g.show_command('show',
                       'get_immutability_policy',
                       transform=transform_immutability_policy)
        g.command('create', 'create_or_update_immutability_policy')
        g.command('delete',
                  'delete_immutability_policy',
                  transform=lambda x: None)
        g.command('lock', 'lock_immutability_policy')
        g.command('extend', 'extend_immutability_policy')

    with self.command_group('storage container legal-hold',
                            command_type=blob_container_mgmt_sdk,
                            min_api='2018-02-01') as g:
        g.command('set', 'set_legal_hold')
        g.command('clear', 'clear_legal_hold')
        g.show_command('show',
                       'get',
                       transform=lambda x: getattr(x, 'legal_hold', x))

    file_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storage.file.fileservice#FileService.{}',
        client_factory=file_data_service_factory,
        resource_type=ResourceType.DATA_STORAGE)

    with self.command_group('storage share',
                            command_type=file_sdk,
                            custom_command_type=get_custom_sdk(
                                'file', file_data_service_factory)) as g:
        from ._format import (transform_share_list,
                              transform_boolean_for_table)
        g.storage_command('list',
                          'list_shares',
                          transform=transform_storage_list_output,
                          table_transformer=transform_share_list)
        g.storage_command(
            'create',
            'create_share',
            transform=create_boolean_result_output_transformer('created'),
            table_transformer=transform_boolean_for_table)
        g.storage_command(
            'delete',
            'delete_share',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command('generate-sas',
                          'generate_share_shared_access_signature')
        g.storage_command('stats', 'get_share_stats')
        g.storage_command('show',
                          'get_share_properties',
                          exception_handler=show_exception_handler)
        g.storage_command('update', 'set_share_properties')
        g.storage_command('snapshot', 'snapshot_share', min_api='2017-04-17')
        g.storage_command(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_custom_command('url',
                                 'create_share_url',
                                 transform=transform_url)

        g.storage_command('metadata show',
                          'get_share_metadata',
                          exception_handler=show_exception_handler)
        g.storage_command('metadata update', 'set_share_metadata')

    with self.command_group('storage share policy',
                            command_type=file_sdk,
                            custom_command_type=get_custom_sdk(
                                'acl', file_data_service_factory)) as g:
        g.storage_custom_command('create', 'create_acl_policy')
        g.storage_custom_command('delete', 'delete_acl_policy')
        g.storage_custom_command('show',
                                 'get_acl_policy',
                                 exception_handler=show_exception_handler)
        g.storage_custom_command('list',
                                 'list_acl_policies',
                                 table_transformer=transform_acl_list_output)
        g.storage_custom_command('update', 'set_acl_policy')

    with self.command_group('storage directory',
                            command_type=file_sdk,
                            custom_command_type=get_custom_sdk(
                                'directory', file_data_service_factory)) as g:
        from ._format import transform_file_directory_result, transform_file_output

        g.storage_command(
            'create',
            'create_directory',
            transform=create_boolean_result_output_transformer('created'),
            table_transformer=transform_boolean_for_table)
        g.storage_command(
            'delete',
            'delete_directory',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command('show',
                          'get_directory_properties',
                          table_transformer=transform_file_output,
                          exception_handler=show_exception_handler)
        g.storage_command(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_command('metadata show',
                          'get_directory_metadata',
                          exception_handler=show_exception_handler)
        g.storage_command('metadata update', 'set_directory_metadata')
        g.storage_custom_command(
            'list',
            'list_share_directories',
            transform=transform_file_directory_result(self.cli_ctx),
            table_transformer=transform_file_output,
            doc_string_source='file#FileService.list_directories_and_files')

    with self.command_group('storage file',
                            command_type=file_sdk,
                            custom_command_type=get_custom_sdk(
                                'file', file_data_service_factory)) as g:
        from ._format import transform_file_directory_result, transform_boolean_for_table, transform_file_output
        from ._transformers import transform_url
        g.storage_custom_command(
            'list',
            'list_share_files',
            transform=transform_file_directory_result(self.cli_ctx),
            table_transformer=transform_file_output,
            doc_string_source='file#FileService.list_directories_and_files')
        g.storage_command(
            'delete',
            'delete_file',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command('resize', 'resize_file')
        g.storage_custom_command('url',
                                 'create_file_url',
                                 transform=transform_url)
        g.storage_command('generate-sas',
                          'generate_file_shared_access_signature')
        g.storage_command('show',
                          'get_file_properties',
                          table_transformer=transform_file_output,
                          exception_handler=show_exception_handler)
        g.storage_command('update', 'set_file_properties')
        g.storage_command(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_command('download', 'get_file_to_path')
        g.storage_command('upload', 'create_file_from_path')
        g.storage_command('metadata show',
                          'get_file_metadata',
                          exception_handler=show_exception_handler)
        g.storage_command('metadata update', 'set_file_metadata')
        g.storage_command('copy start', 'copy_file')
        g.storage_command('copy cancel', 'abort_copy_file')
        g.storage_custom_command('upload-batch', 'storage_file_upload_batch')
        g.storage_custom_command('download-batch',
                                 'storage_file_download_batch')
        g.storage_custom_command('delete-batch', 'storage_file_delete_batch')
        g.storage_custom_command('copy start-batch', 'storage_file_copy_batch')

    with self.command_group(
            'storage cors',
            get_custom_sdk('cors', multi_service_properties_factory)) as g:
        from ._transformers import transform_cors_list_output

        g.storage_command('add', 'add_cors')
        g.storage_command('clear', 'clear_cors')
        g.storage_command('list',
                          'list_cors',
                          transform=transform_cors_list_output)

    queue_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storage.queue.queueservice#QueueService.{}',
        client_factory=queue_data_service_factory,
        resource_type=ResourceType.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_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_oauth('metadata show',
                                'get_queue_metadata',
                                exception_handler=show_exception_handler)
        g.storage_command_oauth('metadata update', 'set_queue_metadata')

        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=show_exception_handler)
        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_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.{}',
            client_factory=table_data_service_factory,
            resource_type=ResourceType.DATA_COSMOS_TABLE)
    else:
        table_sdk = CliCommandType(
            operations_tmpl=
            'azure.multiapi.storage.table.tableservice#TableService.{}',
            client_factory=table_data_service_factory,
            resource_type=ResourceType.DATA_COSMOS_TABLE)

    with self.command_group('storage table',
                            table_sdk,
                            custom_command_type=get_custom_sdk(
                                'acl', table_data_service_factory)) as g:
        from ._format import transform_boolean_for_table
        from ._transformers import create_boolean_result_output_transformer

        g.storage_command(
            'create',
            'create_table',
            transform=create_boolean_result_output_transformer('created'),
            table_transformer=transform_boolean_for_table)
        g.storage_command(
            'delete',
            'delete_table',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_command('generate-sas',
                          'generate_table_shared_access_signature')
        g.storage_command('list',
                          'list_tables',
                          transform=transform_storage_list_output)
        g.storage_command('stats',
                          'get_table_service_stats',
                          min_api='2016-05-31')

        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=show_exception_handler)
        g.storage_custom_command('policy list',
                                 'list_acl_policies',
                                 table_transformer=transform_acl_list_output)
        g.storage_custom_command('policy update', 'set_acl_policy')

    with self.command_group('storage entity',
                            table_sdk,
                            custom_command_type=get_custom_sdk(
                                'table', table_data_service_factory)) as g:
        from ._format import transform_boolean_for_table, transform_entity_show
        from ._transformers import (create_boolean_result_output_transformer,
                                    transform_entity_query_output,
                                    transform_entities_result,
                                    transform_entity_result)

        g.storage_command('query',
                          'query_entities',
                          table_transformer=transform_entity_query_output,
                          transform=transform_entities_result)
        g.storage_command('replace', 'update_entity')
        g.storage_command('merge', 'merge_entity')
        g.storage_command(
            'delete',
            'delete_entity',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command('show',
                          'get_entity',
                          table_transformer=transform_entity_show,
                          exception_handler=show_exception_handler,
                          transform=transform_entity_result)
        g.storage_custom_command('insert', 'insert_table_entity')
コード例 #3
0
ファイル: commands.py プロジェクト: tikicoder/azure-cli
def load_command_table(self, _):  # pylint: disable=too-many-locals, too-many-statements
    storage_account_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#StorageAccountsOperations.{}',
        client_factory=cf_sa,
        resource_type=ResourceType.MGMT_STORAGE)

    blob_service_mgmt_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#BlobServicesOperations.{}',
        client_factory=cf_mgmt_blob_services,
        resource_type=ResourceType.MGMT_STORAGE)

    file_service_mgmt_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#FileServicesOperations.{}',
        client_factory=cf_mgmt_file_services,
        resource_type=ResourceType.MGMT_STORAGE)

    file_shares_mgmt_sdk = CliCommandType(
        operations_tmpl='azure.mgmt.storage.operations#FileSharesOperations.{}',
        client_factory=cf_mgmt_file_shares,
        resource_type=ResourceType.MGMT_STORAGE)

    storage_account_sdk_keys = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#StorageAccountsOperations.{}',
        client_factory=cf_sa_for_keys,
        resource_type=ResourceType.MGMT_STORAGE)

    private_link_resource_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#PrivateLinkResourcesOperations.{}',
        client_factory=cf_private_link,
        resource_type=ResourceType.MGMT_STORAGE)

    private_endpoint_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#PrivateEndpointConnectionsOperations.{}',
        client_factory=cf_private_endpoint,
        resource_type=ResourceType.MGMT_STORAGE)

    private_endpoint_custom_type = CliCommandType(
        operations_tmpl=
        'azure.cli.command_modules.storage.operations.account#{}',
        client_factory=cf_private_endpoint,
        resource_type=ResourceType.MGMT_STORAGE)

    storage_account_custom_type = CliCommandType(
        operations_tmpl=
        'azure.cli.command_modules.storage.operations.account#{}',
        client_factory=cf_sa)

    cloud_data_plane_sdk = CliCommandType(
        operations_tmpl='azure.multiapi.storage.common#CloudStorageAccount.{}',
        client_factory=cloud_storage_account_service_factory)

    block_blob_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storage.blob.blockblobservice#BlockBlobService.{}',
        client_factory=blob_data_service_factory,
        resource_type=ResourceType.DATA_STORAGE)

    def get_custom_sdk(custom_module,
                       client_factory,
                       resource_type=ResourceType.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."""
        return CliCommandType(
            operations_tmpl='azure.cli.command_modules.storage.operations.{}#'.
            format(custom_module) + '{}',
            client_factory=client_factory,
            resource_type=resource_type)

    with self.command_group('storage',
                            command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk(
                                'azcopy', blob_data_service_factory)) as g:
        g.storage_custom_command('remove', 'storage_remove', is_preview=True)

    with self.command_group('storage',
                            custom_command_type=get_custom_sdk('azcopy',
                                                               None)) as g:
        g.custom_command('copy', 'storage_copy', is_preview=True)

    with self.command_group(
            'storage account',
            storage_account_sdk,
            resource_type=ResourceType.MGMT_STORAGE,
            custom_command_type=storage_account_custom_type) as g:
        g.command('check-name', 'check_name_availability')
        g.custom_command('create', 'create_storage_account')
        g.command('delete', 'delete', confirmation=True)
        g.show_command('show', 'get_properties')
        g.custom_command('list', 'list_storage_accounts')
        g.custom_command('show-usage',
                         'show_storage_account_usage',
                         min_api='2018-02-01')
        g.custom_command('show-usage',
                         'show_storage_account_usage_no_location',
                         max_api='2017-10-01')
        g.custom_command('show-connection-string',
                         'show_storage_account_connection_string')
        g.generic_update_command('update',
                                 getter_name='get_properties',
                                 setter_name='update',
                                 custom_func_name='update_storage_account',
                                 min_api='2016-12-01')
        failover_confirmation = """
        The secondary cluster will become the primary cluster after failover. Please understand the following impact to your storage account before you initiate the failover:
            1. Please check the Last Sync Time using `az storage account show` with `--expand geoReplicationStats` and check the "geoReplicationStats" property. This is the data you may lose if you initiate the failover.
            2. After the failover, your storage account type will be converted to locally redundant storage (LRS). You can convert your account to use geo-redundant storage (GRS).
            3. Once you re-enable GRS/GZRS for your storage account, Microsoft will replicate data to your new secondary region. Replication time is dependent on the amount of data to replicate. Please note that there are bandwidth charges for the bootstrap. Please refer to doc: https://azure.microsoft.com/pricing/details/bandwidth/
        """
        g.command('failover',
                  'failover',
                  supports_no_wait=True,
                  is_preview=True,
                  min_api='2018-07-01',
                  confirmation=failover_confirmation)

    with self.command_group('storage account',
                            storage_account_sdk_keys,
                            resource_type=ResourceType.MGMT_STORAGE) as g:
        from ._validators import validate_key_name
        g.command('keys renew',
                  'regenerate_key',
                  validator=validate_key_name,
                  transform=lambda x: getattr(x, 'keys', x))
        g.command('keys list',
                  'list_keys',
                  transform=lambda x: getattr(x, 'keys', x))
        g.command('revoke-delegation-keys',
                  'revoke_user_delegation_keys',
                  min_api='2019-04-01')

    with self.command_group('storage account', cloud_data_plane_sdk) as g:
        g.storage_command('generate-sas', 'generate_shared_access_signature')

    encryption_scope_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#EncryptionScopesOperations.{}',
        client_factory=cf_mgmt_encryption_scope,
        resource_type=ResourceType.MGMT_STORAGE)

    encryption_scope_custom_type = CliCommandType(
        operations_tmpl=
        'azure.cli.command_modules.storage.operations.account#{}',
        client_factory=cf_mgmt_encryption_scope,
        resource_type=ResourceType.MGMT_STORAGE)

    with self.command_group('storage account encryption-scope',
                            encryption_scope_sdk,
                            custom_command_type=encryption_scope_custom_type,
                            is_preview=True,
                            resource_type=ResourceType.MGMT_STORAGE,
                            min_api='2019-06-01') as g:

        g.custom_command('create', 'create_encryption_scope')
        g.show_command('show', 'get')
        g.command('list', 'list')
        g.custom_command('update', 'update_encryption_scope')

    management_policy_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#ManagementPoliciesOperations.{}',
        client_factory=cf_mgmt_policy,
        resource_type=ResourceType.MGMT_STORAGE)

    management_policy_custom_type = CliCommandType(
        operations_tmpl=
        'azure.cli.command_modules.storage.operations.account#{}',
        client_factory=cf_mgmt_policy)

    storage_blob_custom_type = CliCommandType(
        operations_tmpl='azure.cli.command_modules.storage.operations.blob#{}',
        client_factory=cf_sa,
        resource_type=ResourceType.MGMT_STORAGE)

    with self.command_group(
            'storage account management-policy',
            management_policy_sdk,
            resource_type=ResourceType.MGMT_STORAGE,
            min_api='2018-11-01',
            custom_command_type=management_policy_custom_type) as g:
        g.show_command('show', 'get')
        g.custom_command('create', 'create_management_policies')
        g.generic_update_command('update',
                                 getter_name='get',
                                 setter_name='update_management_policies',
                                 setter_type=management_policy_custom_type)
        g.command('delete', 'delete')

    with self.command_group('storage account network-rule',
                            storage_account_sdk,
                            custom_command_type=storage_account_custom_type,
                            resource_type=ResourceType.MGMT_STORAGE,
                            min_api='2017-06-01') as g:
        g.custom_command('add', 'add_network_rule')
        g.custom_command('list', 'list_network_rules')
        g.custom_command('remove', 'remove_network_rule')

    with self.command_group('storage account private-endpoint-connection',
                            private_endpoint_sdk,
                            custom_command_type=private_endpoint_custom_type,
                            is_preview=True,
                            resource_type=ResourceType.MGMT_STORAGE,
                            min_api='2019-06-01') as g:
        from ._validators import validate_private_endpoint_connection_id
        g.command('delete',
                  'delete',
                  confirmation=True,
                  validator=validate_private_endpoint_connection_id)
        g.command('show',
                  'get',
                  validator=validate_private_endpoint_connection_id)
        g.custom_command('approve',
                         'approve_private_endpoint_connection',
                         validator=validate_private_endpoint_connection_id)
        g.custom_command('reject',
                         'reject_private_endpoint_connection',
                         validator=validate_private_endpoint_connection_id)

    with self.command_group('storage account private-link-resource',
                            private_link_resource_sdk,
                            resource_type=ResourceType.MGMT_STORAGE) as g:
        from azure.cli.core.commands.transform import gen_dict_to_list_transform
        g.command('list',
                  'list_by_storage_account',
                  is_preview=True,
                  min_api='2019-06-01',
                  transform=gen_dict_to_list_transform(key="value"))

    with self.command_group('storage account blob-service-properties',
                            blob_service_mgmt_sdk,
                            custom_command_type=storage_account_custom_type,
                            resource_type=ResourceType.MGMT_STORAGE,
                            min_api='2018-07-01',
                            is_preview=True) as g:
        g.show_command('show', 'get_service_properties')
        g.generic_update_command(
            'update',
            getter_name='get_service_properties',
            setter_name='set_service_properties',
            custom_func_name='update_blob_service_properties')

    with self.command_group('storage account file-service-properties',
                            file_service_mgmt_sdk,
                            custom_command_type=get_custom_sdk(
                                'account',
                                client_factory=cf_mgmt_file_services,
                                resource_type=ResourceType.MGMT_STORAGE),
                            resource_type=ResourceType.MGMT_STORAGE,
                            min_api='2019-06-01',
                            is_preview=True) as g:
        g.show_command('show', 'get_service_properties')
        g.custom_command('update', 'update_file_service_properties')

    with self.command_group(
            'storage logging',
            get_custom_sdk('logging', multi_service_properties_factory)) as g:
        from ._transformers import transform_logging_list_output
        g.storage_command('update', 'set_logging')
        g.storage_command('show',
                          'get_logging',
                          table_transformer=transform_logging_list_output,
                          exception_handler=show_exception_handler)
        g.storage_command('off', 'disable_logging', is_preview=True)

    with self.command_group(
            'storage metrics',
            get_custom_sdk('metrics', multi_service_properties_factory)) as g:
        from ._transformers import transform_metrics_list_output
        g.storage_command('update', 'set_metrics')
        g.storage_command('show',
                          'get_metrics',
                          table_transformer=transform_metrics_list_output,
                          exception_handler=show_exception_handler)

    base_blob_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storage.blob.baseblobservice#BaseBlobService.{}',
        client_factory=blob_data_service_factory,
        resource_type=ResourceType.DATA_STORAGE)

    blob_client_sdk = CliCommandType(
        operation_tmpl=
        'azure.multiapi.storagev2.blob._blob_client#BlobClient.{}',
        client_factory=cf_blob_client,
        resource_type=ResourceType.DATA_STORAGE_BLOB)

    with self.command_group(
            'storage blob',
            blob_client_sdk,
            resource_type=ResourceType.DATA_STORAGE_BLOB,
            min_api='2019-02-02',
            custom_command_type=get_custom_sdk(
                'blob',
                client_factory=cf_blob_client,
                resource_type=ResourceType.DATA_STORAGE_BLOB)) as g:
        from ._transformers import transform_blob_json_output
        from ._format import transform_blob_output
        g.storage_custom_command_oauth(
            'show',
            'show_blob_v2',
            transform=transform_blob_json_output,
            table_transformer=transform_blob_output,
            exception_handler=show_exception_handler)

    with self.command_group('storage blob',
                            command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk(
                                'blob', blob_data_service_factory)) as g:
        from ._format import transform_boolean_for_table, transform_blob_output
        from ._transformers import (transform_storage_list_output,
                                    transform_url,
                                    create_boolean_result_output_transformer)
        from ._validators import (process_blob_download_batch_parameters,
                                  process_blob_delete_batch_parameters,
                                  process_blob_upload_batch_parameters)

        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',
                                table_transformer=transform_blob_output)
        g.storage_custom_command_oauth('generate-sas', 'generate_sas_blob_uri')
        g.storage_custom_command_oauth('url',
                                       'create_blob_url',
                                       transform=transform_url)
        g.storage_command_oauth('snapshot', 'snapshot_blob')
        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')
        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(
            'upload',
            'upload_blob',
            doc_string_source='blob#BlockBlobService.create_blob_from_path')
        g.storage_custom_command_oauth(
            'upload-batch',
            'storage_blob_upload_batch',
            validator=process_blob_upload_batch_parameters)
        g.storage_custom_command_oauth(
            'download-batch',
            'storage_blob_download_batch',
            validator=process_blob_download_batch_parameters)
        g.storage_custom_command_oauth(
            'delete-batch',
            'storage_blob_delete_batch',
            validator=process_blob_delete_batch_parameters)
        g.storage_command_oauth('metadata show',
                                'get_blob_metadata',
                                exception_handler=show_exception_handler)
        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',
                            custom_command_type=get_custom_sdk(
                                'blob', cf_blob_client)) as g:
        g.storage_custom_command_oauth('set-tier', 'set_blob_tier_v2')

    with self.command_group('storage blob',
                            storage_account_sdk,
                            resource_type=ResourceType.MGMT_STORAGE,
                            custom_command_type=storage_blob_custom_type) as g:
        g.custom_command('restore',
                         'restore_blob_ranges',
                         min_api='2019-06-01',
                         is_preview=True,
                         supports_no_wait=True)

    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,
            min_api='2016-05-31') as g:
        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,
            min_api='2016-05-31') as g:
        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_oauth(
            'show',
            'get_blob_service_properties',
            transform=lambda x: getattr(x, 'delete_retention_policy', x),
            exception_handler=show_exception_handler)
        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_oauth('show',
                                'get_blob_service_properties',
                                exception_handler=show_exception_handler)
        g.storage_command_oauth('update',
                                generic_update=True,
                                getter_name='get_blob_service_properties',
                                setter_type=get_custom_sdk(
                                    'blob', cf_blob_data_gen_update),
                                setter_name='set_service_properties',
                                client_factory=cf_blob_data_gen_update)

    with self.command_group('storage blob',
                            command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk(
                                'azcopy', blob_data_service_factory)) as g:
        g.storage_custom_command_oauth('sync',
                                       'storage_blob_sync',
                                       is_preview=True)

    with self.command_group('storage container',
                            command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk(
                                'blob', blob_data_service_factory)) as g:
        from azure.cli.command_modules.storage._transformers import (
            transform_storage_list_output,
            transform_container_permission_output, transform_acl_list_output)
        from azure.cli.command_modules.storage._format import (
            transform_container_list, transform_boolean_for_table,
            transform_container_show)
        from ._validators import process_container_delete_parameters, validate_client_auth_parameter

        g.storage_command_oauth('list',
                                'list_containers',
                                transform=transform_storage_list_output,
                                table_transformer=transform_container_list)
        g.storage_custom_command_oauth(
            'delete',
            'delete_container',
            validator=process_container_delete_parameters,
            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=show_exception_handler)
        g.storage_custom_command_oauth(
            'create',
            'create_container',
            validator=validate_client_auth_parameter,
            client_factory=None,
            transform=create_boolean_result_output_transformer('created'),
            table_transformer=transform_boolean_for_table)
        g.storage_custom_command_oauth(
            'generate-sas',
            'generate_container_shared_access_signature',
            min_api='2018-11-09')
        g.storage_command_oauth('generate-sas',
                                'generate_container_shared_access_signature',
                                max_api='2018-03-28')
        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=show_exception_handler)

        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')

    with self.command_group('storage container',
                            command_type=block_blob_sdk,
                            custom_command_type=get_custom_sdk(
                                'acl', blob_data_service_factory)) as g:
        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=show_exception_handler)
        g.storage_custom_command_oauth(
            'policy list',
            'list_acl_policies',
            table_transformer=transform_acl_list_output)

    blob_container_mgmt_sdk = CliCommandType(
        operations_tmpl=
        'azure.mgmt.storage.operations#BlobContainersOperations.{}',
        client_factory=cf_blob_container_mgmt,
        resource_type=ResourceType.MGMT_STORAGE)

    with self.command_group('storage container immutability-policy',
                            command_type=blob_container_mgmt_sdk,
                            min_api='2018-02-01') as g:
        from azure.cli.command_modules.storage._transformers import transform_immutability_policy
        g.show_command('show',
                       'get_immutability_policy',
                       transform=transform_immutability_policy)
        g.command('create', 'create_or_update_immutability_policy')
        g.command('delete',
                  'delete_immutability_policy',
                  transform=lambda x: None)
        g.command('lock', 'lock_immutability_policy')
        g.command('extend', 'extend_immutability_policy')

    with self.command_group('storage container legal-hold',
                            command_type=blob_container_mgmt_sdk,
                            min_api='2018-02-01') as g:
        g.command('set', 'set_legal_hold')
        g.command('clear', 'clear_legal_hold')
        g.show_command('show',
                       'get',
                       transform=lambda x: getattr(x, 'legal_hold', x))

    file_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storage.file.fileservice#FileService.{}',
        client_factory=file_data_service_factory,
        resource_type=ResourceType.DATA_STORAGE)

    with self.command_group('storage share-rm',
                            command_type=file_shares_mgmt_sdk,
                            custom_command_type=get_custom_sdk(
                                'file',
                                cf_mgmt_file_shares,
                                resource_type=ResourceType.MGMT_STORAGE),
                            resource_type=ResourceType.MGMT_STORAGE,
                            min_api='2019-04-01',
                            is_preview=True) as g:
        g.custom_command('create', 'create_share_rm')
        g.command('delete', 'delete', confirmation=True)
        g.custom_command(
            'exists',
            '_file_share_exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.command('list', 'list')
        g.show_command('show', 'get')
        g.generic_update_command('update',
                                 setter_name='update',
                                 setter_arg_name='file_share',
                                 custom_func_name='update_share_rm')

    with self.command_group('storage share',
                            command_type=file_sdk,
                            custom_command_type=get_custom_sdk(
                                'file', file_data_service_factory)) as g:
        from ._format import (transform_share_list,
                              transform_boolean_for_table)
        g.storage_command('list',
                          'list_shares',
                          transform=transform_storage_list_output,
                          table_transformer=transform_share_list)
        g.storage_command(
            'create',
            'create_share',
            transform=create_boolean_result_output_transformer('created'),
            table_transformer=transform_boolean_for_table)
        g.storage_command(
            'delete',
            'delete_share',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command('generate-sas',
                          'generate_share_shared_access_signature')
        g.storage_command('stats', 'get_share_stats')
        g.storage_command('show',
                          'get_share_properties',
                          exception_handler=show_exception_handler)
        g.storage_command('update', 'set_share_properties')
        g.storage_command('snapshot', 'snapshot_share', min_api='2017-04-17')
        g.storage_command(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_custom_command('url',
                                 'create_share_url',
                                 transform=transform_url)

        g.storage_command('metadata show',
                          'get_share_metadata',
                          exception_handler=show_exception_handler)
        g.storage_command('metadata update', 'set_share_metadata')

    with self.command_group('storage share policy',
                            command_type=file_sdk,
                            custom_command_type=get_custom_sdk(
                                'acl', file_data_service_factory)) as g:
        g.storage_custom_command('create', 'create_acl_policy')
        g.storage_custom_command('delete', 'delete_acl_policy')
        g.storage_custom_command('show',
                                 'get_acl_policy',
                                 exception_handler=show_exception_handler)
        g.storage_custom_command('list',
                                 'list_acl_policies',
                                 table_transformer=transform_acl_list_output)
        g.storage_custom_command('update', 'set_acl_policy')

    with self.command_group('storage directory',
                            command_type=file_sdk,
                            custom_command_type=get_custom_sdk(
                                'directory', file_data_service_factory)) as g:
        from ._format import transform_file_directory_result, transform_file_output

        g.storage_command(
            'create',
            'create_directory',
            transform=create_boolean_result_output_transformer('created'),
            table_transformer=transform_boolean_for_table)
        g.storage_command(
            'delete',
            'delete_directory',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command('show',
                          'get_directory_properties',
                          table_transformer=transform_file_output,
                          exception_handler=show_exception_handler)
        g.storage_command(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_command('metadata show',
                          'get_directory_metadata',
                          exception_handler=show_exception_handler)
        g.storage_command('metadata update', 'set_directory_metadata')
        g.storage_custom_command(
            'list',
            'list_share_directories',
            transform=transform_file_directory_result(self.cli_ctx),
            table_transformer=transform_file_output,
            doc_string_source='file#FileService.list_directories_and_files')

    with self.command_group('storage file',
                            command_type=file_sdk,
                            custom_command_type=get_custom_sdk(
                                'file', file_data_service_factory)) as g:
        from ._format import transform_file_directory_result, transform_boolean_for_table, transform_file_output
        from ._transformers import transform_url
        g.storage_custom_command(
            'list',
            'list_share_files',
            transform=transform_file_directory_result(self.cli_ctx),
            table_transformer=transform_file_output,
            doc_string_source='file#FileService.list_directories_and_files')
        g.storage_command(
            'delete',
            'delete_file',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command('resize', 'resize_file')
        g.storage_custom_command('url',
                                 'create_file_url',
                                 transform=transform_url)
        g.storage_command('generate-sas',
                          'generate_file_shared_access_signature')
        g.storage_command('show',
                          'get_file_properties',
                          table_transformer=transform_file_output,
                          exception_handler=show_exception_handler)
        g.storage_command('update', 'set_file_properties')
        g.storage_command(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_command('download', 'get_file_to_path')
        g.storage_command('upload', 'create_file_from_path')
        g.storage_command('metadata show',
                          'get_file_metadata',
                          exception_handler=show_exception_handler)
        g.storage_command('metadata update', 'set_file_metadata')
        g.storage_command('copy start', 'copy_file')
        g.storage_command('copy cancel', 'abort_copy_file')
        g.storage_custom_command('upload-batch', 'storage_file_upload_batch')
        g.storage_custom_command('download-batch',
                                 'storage_file_download_batch')
        g.storage_custom_command('delete-batch', 'storage_file_delete_batch')
        g.storage_custom_command('copy start-batch', 'storage_file_copy_batch')

    with self.command_group(
            'storage cors',
            get_custom_sdk('cors', multi_service_properties_factory)) as g:
        from ._transformers import transform_cors_list_output

        g.storage_command('add', 'add_cors')
        g.storage_command('clear', 'clear_cors')
        g.storage_command('list',
                          'list_cors',
                          transform=transform_cors_list_output)

    queue_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storage.queue.queueservice#QueueService.{}',
        client_factory=queue_data_service_factory,
        resource_type=ResourceType.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_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_oauth('metadata show',
                                'get_queue_metadata',
                                exception_handler=show_exception_handler)
        g.storage_command_oauth('metadata update', 'set_queue_metadata')

        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=show_exception_handler)
        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_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.{}',
            client_factory=table_data_service_factory,
            resource_type=ResourceType.DATA_COSMOS_TABLE)
    else:
        table_sdk = CliCommandType(
            operations_tmpl=
            'azure.multiapi.storage.table.tableservice#TableService.{}',
            client_factory=table_data_service_factory,
            resource_type=ResourceType.DATA_COSMOS_TABLE)

    with self.command_group('storage table',
                            table_sdk,
                            custom_command_type=get_custom_sdk(
                                'acl', table_data_service_factory)) as g:
        from ._format import transform_boolean_for_table
        from ._transformers import create_boolean_result_output_transformer

        g.storage_command(
            'create',
            'create_table',
            transform=create_boolean_result_output_transformer('created'),
            table_transformer=transform_boolean_for_table)
        g.storage_command(
            'delete',
            'delete_table',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_command('generate-sas',
                          'generate_table_shared_access_signature')
        g.storage_command('list',
                          'list_tables',
                          transform=transform_storage_list_output)
        g.storage_command('stats',
                          'get_table_service_stats',
                          min_api='2016-05-31')

        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=show_exception_handler)
        g.storage_custom_command('policy list',
                                 'list_acl_policies',
                                 table_transformer=transform_acl_list_output)
        g.storage_custom_command('policy update', 'set_acl_policy')

    with self.command_group('storage entity',
                            table_sdk,
                            custom_command_type=get_custom_sdk(
                                'table', table_data_service_factory)) as g:
        from ._format import transform_boolean_for_table, transform_entity_show
        from ._transformers import (create_boolean_result_output_transformer,
                                    transform_entity_query_output,
                                    transform_entities_result,
                                    transform_entity_result)

        g.storage_command('query',
                          'query_entities',
                          table_transformer=transform_entity_query_output,
                          transform=transform_entities_result)
        g.storage_command('replace', 'update_entity')
        g.storage_command('merge', 'merge_entity')
        g.storage_command(
            'delete',
            'delete_entity',
            transform=create_boolean_result_output_transformer('deleted'),
            table_transformer=transform_boolean_for_table)
        g.storage_command('show',
                          'get_entity',
                          table_transformer=transform_entity_show,
                          exception_handler=show_exception_handler,
                          transform=transform_entity_result)
        g.storage_custom_command('insert', 'insert_table_entity')

    adls_service_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storagev2.filedatalake._data_lake_service_client#DataLakeServiceClient.{}',
        client_factory=cf_adls_service,
        resource_type=ResourceType.DATA_STORAGE_FILEDATALAKE)

    adls_fs_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storagev2.filedatalake._file_system_client#FileSystemClient.{}',
        client_factory=cf_adls_file_system,
        resource_type=ResourceType.DATA_STORAGE_FILEDATALAKE)
    adls_directory_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storagev2.filedatalake._data_lake_directory_client#DataLakeDirectoryClient.{}',
        client_factory=cf_adls_directory,
        resource_type=ResourceType.DATA_STORAGE_FILEDATALAKE)
    adls_file_sdk = CliCommandType(
        operations_tmpl=
        'azure.multiapi.storagev2.filedatalake._data_lake_file_client#DataLakeFileClient.{}',
        client_factory=cf_adls_file,
        resource_type=ResourceType.DATA_STORAGE_FILEDATALAKE)

    with self.command_group(
            'storage fs',
            adls_fs_sdk,
            resource_type=ResourceType.DATA_STORAGE_FILEDATALAKE,
            custom_command_type=get_custom_sdk('filesystem',
                                               cf_adls_file_system),
            min_api='2018-11-09') as g:
        from ._transformers import transform_fs_list_public_access_output, transform_fs_public_access_output, \
            transform_metadata
        g.storage_command_oauth('create', 'create_file_system')
        g.storage_command_oauth(
            'list',
            'list_file_systems',
            command_type=adls_service_sdk,
            transform=transform_fs_list_public_access_output)
        g.storage_command_oauth('show',
                                'get_file_system_properties',
                                exception_handler=show_exception_handler,
                                transform=transform_fs_public_access_output)
        g.storage_command_oauth('delete',
                                'delete_file_system',
                                confirmation=True)
        g.storage_custom_command_oauth(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_command_oauth('metadata update', 'set_file_system_metadata')
        g.storage_command_oauth('metadata show',
                                'get_file_system_properties',
                                exception_handler=show_exception_handler,
                                transform=transform_metadata)

    with self.command_group(
            'storage fs directory',
            adls_directory_sdk,
            custom_command_type=get_custom_sdk('fs_directory',
                                               cf_adls_directory),
            resource_type=ResourceType.DATA_STORAGE_FILEDATALAKE,
            min_api='2018-11-09') as g:
        from ._transformers import transform_storage_list_output, transform_metadata
        g.storage_command_oauth('create', 'create_directory')
        g.storage_custom_command_oauth(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_custom_command_oauth(
            'show',
            'get_directory_properties',
            exception_handler=show_exception_handler)
        g.storage_command_oauth('delete',
                                'delete_directory',
                                confirmation=True)
        g.storage_command_oauth('move', 'rename_directory')
        g.storage_custom_command_oauth('list',
                                       'list_fs_directories',
                                       client_factory=cf_adls_file_system,
                                       transform=transform_storage_list_output)
        g.storage_command_oauth('metadata update', 'set_metadata')
        g.storage_command_oauth('metadata show',
                                'get_directory_properties',
                                exception_handler=show_exception_handler,
                                transform=transform_metadata)

    with self.command_group(
            'storage fs file',
            adls_file_sdk,
            resource_type=ResourceType.DATA_STORAGE_FILEDATALAKE,
            custom_command_type=get_custom_sdk('fs_file', cf_adls_file),
            min_api='2018-11-09') as g:
        from ._transformers import transform_storage_list_output, create_boolean_result_output_transformer
        g.storage_command_oauth('create', 'create_file')
        g.storage_custom_command_oauth('upload', 'upload_file')
        g.storage_custom_command_oauth(
            'exists',
            'exists',
            transform=create_boolean_result_output_transformer('exists'))
        g.storage_custom_command_oauth('append', 'append_file')
        g.storage_custom_command_oauth('download', 'download_file')
        g.storage_custom_command_oauth(
            'show',
            'get_file_properties',
            exception_handler=show_exception_handler)
        g.storage_custom_command_oauth('list',
                                       'list_fs_files',
                                       custom_command_type=get_custom_sdk(
                                           'fs_file', cf_adls_file_system),
                                       transform=transform_storage_list_output)
        g.storage_command('move', 'rename_file')
        g.storage_command('delete', 'delete_file', confirmation=True)
        g.storage_command_oauth('metadata update', 'set_metadata')
        g.storage_command_oauth('metadata show',
                                'get_file_properties',
                                exception_handler=show_exception_handler,
                                transform=transform_metadata)

    with self.command_group(
            'storage fs access',
            adls_directory_sdk,
            resource_type=ResourceType.DATA_STORAGE_FILEDATALAKE,
            min_api='2018-11-09') as g:
        from ._transformers import transform_fs_access_output
        g.storage_command('set', 'set_access_control')
        g.storage_command('show',
                          'get_access_control',
                          transform=transform_fs_access_output)