def validate_capabilities(ns):
    """ Extracts multiple space-separated capabilities """
    from azure.mgmt.cosmosdb.models import Capability
    if ns.capabilities is not None:
        capabilties_list = []
        for item in ns.capabilities:
            capabilties_list.append(Capability(name=item))
        ns.capabilities = capabilties_list
    def create_resource(self, name, **kwargs):
        if self.is_live:
            capabilities = Capability(name='EnableTable')
            db_params = DatabaseAccountCreateUpdateParameters(
                capabilities=[capabilities],
                locations=[{'location_name': self.location}],
                location=self.location,
            )

            self.client = self.create_mgmt_client(CosmosDBManagementClient)
            group = self._get_resource_group(**kwargs)
            cosmos_async_operation = self.client.database_accounts.begin_create_or_update(
                group.name,
                name,
                db_params
            )
            self.resource = cosmos_async_operation.result()

            cosmos_keys = self.client.database_accounts.list_keys(
                group.name,
                name
            )
            self.cosmos_key = cosmos_keys.primary_master_key
            self.cosmos_account_name = name

            self.test_class_instance.scrubber.register_name_pair(
                name,
                self.resource_moniker
            )
            self.primary_endpoint = 'https://{}.table.cosmos.azure.com:443/'.format(name)
        else:
            self.resource = StorageAccount(
                location=self.location
            )
            self.resource.name = name
            self.resource.id = name
            self.primary_endpoint = 'https://{}.table.cosmos.azure.com:443/'.format(name)
            self.cosmos_key = 'ZmFrZV9hY29jdW50X2tleQ=='
            self.cosmos_account_name = name
        return {
            self.parameter_name: self.resource,
            '{}_key'.format(self.parameter_name): self.cosmos_key,
            '{}_cs'.format(self.parameter_name): ";".join([
                "DefaultEndpointsProtocol=https",
                "AccountName={}".format(self.cosmos_account_name),
                "AccountKey={}".format(self.cosmos_key),
                "TableEndpoint={}".format(self.primary_endpoint)
            ])
        }
    def __get_cosmosdb_steps(self, cmd, name, location):
        from azure.mgmt.cosmosdb import CosmosDBManagementClient
        from azure.mgmt.cosmosdb.models import Capability
        from azure.cli.core.commands.client_factory import get_mgmt_service_client

        steps = []

        cosmosdb_client = get_mgmt_service_client(cmd.cli_ctx,
                                                  CosmosDBManagementClient)

        from azure.mgmt.cosmosdb.models import (
            DatabaseAccountCreateUpdateParameters, DatabaseAccountKind,
            Location, MongoDBDatabaseCreateUpdateParameters)

        server_params = {
            'resource_group_name':
            name,
            'account_name':
            name,
            'create_update_parameters':
            DatabaseAccountCreateUpdateParameters(
                location=location,
                locations=[
                    Location(location_name=location,
                             failover_priority=0,
                             is_zone_redundant=False)
                ],
                kind=DatabaseAccountKind.mongo_db.value,
                capabilities=[
                    Capability(name='EnableMongo'),
                    Capability(name='EnableServerless'),
                    Capability(name='DisableRateLimitingResponses')
                ],
                tags={'CosmosAccountType': 'Non-Production'})
        }
        steps.append(
            DatabaseCreationStep(
                'server', cosmosdb_client.database_accounts.create_or_update,
                server_params))

        database_params = {
            'resource_group_name':
            name,
            'account_name':
            name,
            'database_name':
            name,
            'create_update_mongo_db_database_parameters':
            MongoDBDatabaseCreateUpdateParameters(resource={'id': name},
                                                  options={})
        }
        steps.append(
            DatabaseCreationStep(
                'database', cosmosdb_client.mongo_db_resources.
                create_update_mongo_db_database, database_params))

        def retrieve_password():
            result = cosmosdb_client.database_accounts.list_keys(
                resource_group_name=name, account_name=name)
            self.password = result.primary_master_key

        steps.append(
            DatabaseCreationStep('retrieve password', retrieve_password, None))
        return steps