def cli_cosmosdb_create(cmd, client, resource_group_name, account_name, locations=None, tags=None, kind=DatabaseAccountKind.global_document_db.value, default_consistency_level=None, max_staleness_prefix=100, max_interval=5, ip_range_filter=None, enable_automatic_failover=None, capabilities=None, enable_virtual_network=None, virtual_network_rules=None, enable_multiple_write_locations=None, disable_key_based_metadata_write_access=None): """Create a new Azure Cosmos DB database account.""" consistency_policy = None if default_consistency_level is not None: consistency_policy = ConsistencyPolicy( default_consistency_level=default_consistency_level, max_staleness_prefix=max_staleness_prefix, max_interval_in_seconds=max_interval) from azure.cli.core.commands.client_factory import get_mgmt_service_client from azure.cli.core.profiles import ResourceType resource_client = get_mgmt_service_client( cmd.cli_ctx, ResourceType.MGMT_RESOURCE_RESOURCES) rg = resource_client.resource_groups.get(resource_group_name) resource_group_location = rg.location # pylint: disable=no-member if not locations: locations = [] locations.append( Location(location_name=resource_group_location, failover_priority=0, is_zone_redundant=False)) params = DatabaseAccountCreateUpdateParameters( location=resource_group_location, locations=locations, tags=tags, kind=kind, consistency_policy=consistency_policy, ip_range_filter=ip_range_filter, is_virtual_network_filter_enabled=enable_virtual_network, enable_automatic_failover=enable_automatic_failover, capabilities=capabilities, virtual_network_rules=virtual_network_rules, enable_multiple_write_locations=enable_multiple_write_locations, disable_key_based_metadata_write_access= disable_key_based_metadata_write_access) async_docdb_create = client.create_or_update(resource_group_name, account_name, params) docdb_account = async_docdb_create.result() docdb_account = client.get(resource_group_name, account_name) # Workaround return docdb_account
def cli_cosmosdb_update(client, resource_group_name, account_name, locations=None, default_consistency_level=None, max_staleness_prefix=None, max_interval=None, ip_range_filter=None, enable_automatic_failover=None): """Update an existing Azure Cosmos DB database account. """ existing = client.get(resource_group_name, account_name) update_consistency_policy = False if max_interval is not None or \ max_staleness_prefix is not None or \ default_consistency_level is not None: update_consistency_policy = True if max_staleness_prefix is None: max_staleness_prefix = existing.consistency_policy.max_staleness_prefix if max_interval is None: max_interval = existing.consistency_policy.max_interval_in_seconds if default_consistency_level is None: default_consistency_level = existing.consistency_policy.default_consistency_level consistency_policy = None if update_consistency_policy: consistency_policy = ConsistencyPolicy(default_consistency_level, max_staleness_prefix, max_interval) else: consistency_policy = existing.consistency_policy if not locations: for loc in existing.read_locations: locations.append( Location(location_name=loc.location_name, failover_priority=loc.failover_priority)) if ip_range_filter is None: ip_range_filter = existing.ip_range_filter if enable_automatic_failover is None: enable_automatic_failover = existing.enable_automatic_failover params = DatabaseAccountCreateUpdateParameters( existing.location, locations, kind=existing.kind, consistency_policy=consistency_policy, ip_range_filter=ip_range_filter) async_docdb_create = client.create_or_update(resource_group_name, account_name, params) docdb_account = async_docdb_create.result() docdb_account = client.get(resource_group_name, account_name) # Workaround return docdb_account
def __get_cosmosdb_steps(self, cmd, name, location): from azure.mgmt.cosmosdb import CosmosDBManagementClient 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, ConsistencyPolicy) server_params = { 'resource_group_name': name, 'account_name': name, 'params': DatabaseAccountCreateUpdateParameters( location=location, locations=[ Location(location_name=location, failover_priority=0, is_zone_redundant=False) ], kind=DatabaseAccountKind.mongo_db.value, consistency_policy=ConsistencyPolicy( default_consistency_level=1, max_staleness_prefix=100, max_interval_in_seconds=5)) } 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, '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
def cli_cosmosdb_update(client, resource_group_name, account_name, locations=None, tags=None, default_consistency_level=None, max_staleness_prefix=None, max_interval=None, ip_range_filter=None, enable_automatic_failover=None, capabilities=None, enable_virtual_network=None, virtual_network_rules=None, enable_multiple_write_locations=None, disable_key_based_metadata_write_access=None): """Update an existing Azure Cosmos DB database account. """ existing = client.get(resource_group_name, account_name) update_consistency_policy = False if max_interval is not None or \ max_staleness_prefix is not None or \ default_consistency_level is not None: update_consistency_policy = True if max_staleness_prefix is None: max_staleness_prefix = existing.consistency_policy.max_staleness_prefix if max_interval is None: max_interval = existing.consistency_policy.max_interval_in_seconds if default_consistency_level is None: default_consistency_level = existing.consistency_policy.default_consistency_level consistency_policy = None if update_consistency_policy: consistency_policy = ConsistencyPolicy( default_consistency_level=default_consistency_level, max_staleness_prefix=max_staleness_prefix, max_interval_in_seconds=max_interval) params = DatabaseAccountUpdateParameters( locations=locations, tags=tags, consistency_policy=consistency_policy, ip_range_filter=ip_range_filter, is_virtual_network_filter_enabled=enable_virtual_network, enable_automatic_failover=enable_automatic_failover, capabilities=capabilities, virtual_network_rules=virtual_network_rules, enable_multiple_write_locations=enable_multiple_write_locations, disable_key_based_metadata_write_access= disable_key_based_metadata_write_access) async_docdb_update = client.update(resource_group_name, account_name, params) docdb_account = async_docdb_update.result() docdb_account = client.get(resource_group_name, account_name) # Workaround return docdb_account
def server_creator(): params = DatabaseAccountCreateUpdateParameters( location=location, locations=[ Location(location_name=location, failover_priority=0, is_zone_redundant=False) ], kind=DatabaseAccountKind.mongo_db.value, consistency_policy=ConsistencyPolicy( default_consistency_level=1, max_staleness_prefix=100, max_interval_in_seconds=5)) return cosmosdb_client.database_accounts.create_or_update( name, name, params)
def cli_cosmosdb_create(cmd, client, resource_group_name, account_name, locations=None, tags=None, kind=DatabaseAccountKind.global_document_db.value, default_consistency_level=None, max_staleness_prefix=100, max_interval=5, ip_range_filter=None, enable_automatic_failover=None, capabilities=None): """Create a new Azure Cosmos DB database account.""" consistency_policy = None if default_consistency_level is not None: consistency_policy = ConsistencyPolicy(default_consistency_level, max_staleness_prefix, max_interval) from azure.mgmt.resource import ResourceManagementClient from azure.cli.core.commands.client_factory import get_mgmt_service_client resource_client = get_mgmt_service_client(cmd.cli_ctx, ResourceManagementClient) rg = resource_client.resource_groups.get(resource_group_name) resource_group_location = rg.location # pylint: disable=no-member if not locations: locations.append( Location(location_name=resource_group_location, failover_priority=0)) params = DatabaseAccountCreateUpdateParameters( resource_group_location, locations, tags=tags, kind=kind, consistency_policy=consistency_policy, ip_range_filter=ip_range_filter, enable_automatic_failover=enable_automatic_failover, capabilities=capabilities) async_docdb_create = client.create_or_update(resource_group_name, account_name, params) docdb_account = async_docdb_create.result() docdb_account = client.get(resource_group_name, account_name) # Workaround return docdb_account
def cli_cosmosdb_update(client, resource_group_name, account_name, locations=None, tags=None, default_consistency_level=None, max_staleness_prefix=None, max_interval=None, ip_range_filter=None, enable_automatic_failover=None, capabilities=None, enable_virtual_network=None, virtual_network_rules=None): """Update an existing Azure Cosmos DB database account. """ existing = client.get(resource_group_name, account_name) # Workaround until PATCH support for all properties # pylint: disable=too-many-boolean-expressions if capabilities is not None: if locations or \ default_consistency_level is not None or \ max_staleness_prefix is not None or \ max_interval is not None or \ ip_range_filter is not None or \ enable_automatic_failover is not None or \ enable_virtual_network is not None or \ virtual_network_rules is not None: raise CLIError( "Cannot set capabilities and update properties at the same time. {0}" .format(locations)) else: async_docdb_create = client.patch(resource_group_name, account_name, tags=tags, capabilities=capabilities) docdb_account = async_docdb_create.result() docdb_account = client.get(resource_group_name, account_name) return docdb_account # Workaround until PATCH support for all properties # pylint: disable=too-many-boolean-expressions if tags is not None: if not locations and \ default_consistency_level is None and \ max_staleness_prefix is None and \ max_interval is None and \ ip_range_filter is None and \ enable_automatic_failover is None and \ enable_virtual_network is None and \ virtual_network_rules is None: async_docdb_create = client.patch(resource_group_name, account_name, tags=tags, capabilities=capabilities) docdb_account = async_docdb_create.result() docdb_account = client.get(resource_group_name, account_name) return docdb_account update_consistency_policy = False if max_interval is not None or \ max_staleness_prefix is not None or \ default_consistency_level is not None: update_consistency_policy = True if max_staleness_prefix is None: max_staleness_prefix = existing.consistency_policy.max_staleness_prefix if max_interval is None: max_interval = existing.consistency_policy.max_interval_in_seconds if default_consistency_level is None: default_consistency_level = existing.consistency_policy.default_consistency_level consistency_policy = None if update_consistency_policy: consistency_policy = ConsistencyPolicy( default_consistency_level=default_consistency_level, max_staleness_prefix=max_staleness_prefix, max_interval_in_seconds=max_interval) else: consistency_policy = existing.consistency_policy if not locations: for loc in existing.read_locations: locations.append( Location(location_name=loc.location_name, failover_priority=loc.failover_priority)) if ip_range_filter is None: ip_range_filter = existing.ip_range_filter if enable_automatic_failover is None: enable_automatic_failover = existing.enable_automatic_failover if enable_virtual_network is None: enable_virtual_network = existing.is_virtual_network_filter_enabled if virtual_network_rules is None: virtual_network_rules = existing.virtual_network_rules if tags is None: tags = existing.tags params = DatabaseAccountCreateUpdateParameters( location=existing.location, locations=locations, tags=tags, kind=existing.kind, consistency_policy=consistency_policy, ip_range_filter=ip_range_filter, enable_automatic_failover=enable_automatic_failover, capabilities=existing.capabilities, is_virtual_network_filter_enabled=enable_virtual_network, virtual_network_rules=virtual_network_rules) async_docdb_create = client.create_or_update(resource_group_name, account_name, params) docdb_account = async_docdb_create.result() docdb_account = client.get(resource_group_name, account_name) # Workaround return docdb_account