Microsoft Azure Data Migration Client Library for Python providing comprehensive database migration management capabilities
Resource SKU information, usage quotas, and service availability management for planning and monitoring migration resources. These capabilities help with capacity planning and resource optimization.
Discover available SKUs and their capabilities for Data Migration Services to assist with service sizing and configuration.
def list_skus(**kwargs) -> ItemPaged[ResourceSku]:
"""
List available resource SKUs for Data Migration Services.
Returns:
Paginated list of available SKUs with capabilities and restrictions
"""Monitor usage and quotas for Data Migration Services in specific Azure regions.
def list(location: str, **kwargs) -> ItemPaged[Quota]:
"""
List usage quotas for Data Migration Services in a location.
Parameters:
- location: Azure region name
Returns:
Paginated list of quota information
"""Discover available operations and capabilities of the Data Migration Management API.
def list(**kwargs) -> ItemPaged[ServiceOperation]:
"""
List available operations for the Data Migration service.
Returns:
Paginated list of available API operations
"""from azure.mgmt.datamigration import DataMigrationManagementClient
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
client = DataMigrationManagementClient(credential, "subscription-id")
# List all available SKUs
skus = client.resource_skus.list_skus()
for sku in skus:
print(f"SKU: {sku.name}")
print(f" Resource Type: {sku.resource_type}")
print(f" Tier: {sku.tier}")
print(f" Size: {sku.size}")
print(f" Family: {sku.family}")
# Show locations where SKU is available
if sku.locations:
print(f" Available in: {', '.join(sku.locations)}")
# Show capabilities
if sku.capabilities:
print(" Capabilities:")
for capability in sku.capabilities:
print(f" {capability.name}: {capability.value}")
# Show restrictions
if sku.restrictions:
print(" Restrictions:")
for restriction in sku.restrictions:
print(f" Type: {restriction.type}")
print(f" Reason: {restriction.reason_code}")
if restriction.values:
print(f" Values: {', '.join(restriction.values)}")
print()# Check quotas for a specific region
location = "East US"
quotas = client.usages.list(location=location)
print(f"Quotas for {location}:")
for quota in quotas:
print(f" {quota.name.localized_value}: {quota.current_value}/{quota.limit}")
print(f" Unit: {quota.unit}")
if quota.name.value:
print(f" Internal name: {quota.name.value}")
print()
# Check if close to limits
for quota in quotas:
if quota.limit > 0:
usage_percentage = (quota.current_value / quota.limit) * 100
if usage_percentage > 80:
print(f"Warning: {quota.name.localized_value} is at {usage_percentage:.1f}% capacity")# List all available operations
operations = client.operations.list()
print("Available Data Migration Service Operations:")
for operation in operations:
print(f"Operation: {operation.name}")
if operation.display:
print(f" Provider: {operation.display.provider}")
print(f" Resource: {operation.display.resource}")
print(f" Operation: {operation.display.operation}")
print(f" Description: {operation.display.description}")
print()
# Filter operations by type
migration_operations = [op for op in operations if 'migrate' in op.name.lower()]
print(f"\nMigration-specific operations: {len(migration_operations)}")# Find suitable SKUs for a migration workload
def find_suitable_skus(min_capacity=None, preferred_locations=None):
suitable_skus = []
skus = client.resource_skus.list_skus()
for sku in skus:
# Skip if not available in preferred locations
if preferred_locations and sku.locations:
if not any(loc in sku.locations for loc in preferred_locations):
continue
# Check capacity requirements
if min_capacity and sku.capabilities:
capacity_capability = next(
(cap for cap in sku.capabilities if cap.name == "MaxDatabaseMigrations"),
None
)
if capacity_capability and int(capacity_capability.value) < min_capacity:
continue
# Check for restrictions
has_restrictions = bool(sku.restrictions and any(
r.type == "Location" for r in sku.restrictions
))
suitable_skus.append({
'name': sku.name,
'tier': sku.tier,
'locations': sku.locations,
'has_restrictions': has_restrictions,
'capabilities': {cap.name: cap.value for cap in sku.capabilities} if sku.capabilities else {}
})
return suitable_skus
# Find SKUs available in East US with at least 5 concurrent migrations
suitable_skus = find_suitable_skus(
min_capacity=5,
preferred_locations=["East US", "West US 2"]
)
print("Suitable SKUs:")
for sku in suitable_skus:
print(f" {sku['name']} ({sku['tier']})")
print(f" Locations: {', '.join(sku['locations'])}")
print(f" Max Migrations: {sku['capabilities'].get('MaxDatabaseMigrations', 'Unknown')}")
print(f" Restrictions: {'Yes' if sku['has_restrictions'] else 'No'}")
print()class ResourceSku:
"""Resource SKU information."""
resource_type: str
name: str
tier: str
size: str
family: str
kind: str
capacity: ResourceSkuCapacity
locations: list[str]
location_info: list[dict]
api_versions: list[str]
costs: list[ResourceSkuCosts]
capabilities: list[ResourceSkuCapabilities]
restrictions: list[ResourceSkuRestrictions]
class ResourceSkuCapacity:
"""SKU capacity information."""
minimum: int
maximum: int
default: int
scale_type: str # ResourceSkuCapacityScaleType enum
class ResourceSkuCapabilities:
"""SKU capability information."""
name: str
value: str
class ResourceSkuCosts:
"""SKU cost information."""
meter_id: str
quantity: int
extended_unit: str
class ResourceSkuRestrictions:
"""SKU restriction information."""
type: str # ResourceSkuRestrictionsType enum
values: list[str]
restriction_info: dict
reason_code: str # ResourceSkuRestrictionsReasonCode enum
class Quota:
"""Usage quota information."""
current_value: int
limit: int
name: QuotaName
unit: str
class QuotaName:
"""Quota name information."""
value: str
localized_value: str
class ServiceOperation:
"""Available service operation."""
name: str
display: ServiceOperationDisplay
origin: str
properties: dict
class ServiceOperationDisplay:
"""Service operation display information."""
provider: str
resource: str
operation: str
description: str
class ResourceSkuCapacityScaleType:
"""Resource SKU capacity scale types."""
AUTOMATIC = "Automatic"
MANUAL = "Manual"
NONE = "None"
class ResourceSkuRestrictionsType:
"""Resource SKU restriction types."""
LOCATION = "Location"
class ResourceSkuRestrictionsReasonCode:
"""Resource SKU restriction reason codes."""
QUOTA_ID = "QuotaId"
NOT_AVAILABLE_FOR_SUBSCRIPTION = "NotAvailableForSubscription"tessl i tessl/pypi-azure-mgmt-datamigration@9.0.0