CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-azure-mgmt-dns

Microsoft Azure DNS Management Client Library for Python

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

dns-resource-references.mddocs/

DNS Resource References

Lookup functionality for DNS records by Azure resource IDs, enabling discovery of DNS records that reference specific Azure resources. This capability is useful for finding which DNS records point to particular Azure services like App Services, CDN endpoints, or Traffic Manager profiles.

Resource Reference Operations

Get DNS Records by Target Resources

Retrieves DNS records that reference specific Azure resources through their resource IDs.

def get_by_target_resources(
    self,
    parameters: Union[DnsResourceReferenceRequest, IO[bytes]],
    **kwargs: Any
) -> DnsResourceReferenceResult:
    """
    Get DNS records that reference specific Azure target resources.
    
    This operation allows you to find DNS records (across all zones in a subscription)
    that point to specific Azure resources like App Services, CDN endpoints, etc.
    
    Args:
        parameters: Request containing list of target resource IDs to search for
        
    Returns:
        DnsResourceReferenceResult: DNS records that reference the target resources
        
    Raises:
        HttpResponseError: If the operation fails or access is denied
    """

Usage Example:

from azure.mgmt.dns.models import DnsResourceReferenceRequest, SubResource

# Define target resources to search for
target_resources = [
    SubResource(id="/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Web/sites/myapp"),
    SubResource(id="/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Cdn/profiles/{profile}/endpoints/{endpoint}")
]

# Create the request
request = DnsResourceReferenceRequest(target_resources=target_resources)

# Find DNS records referencing these resources
result = dns_client.dns_resource_reference.get_by_target_resources(
    parameters=request
)

# Process results
for dns_ref in result.dns_resource_references:
    print(f"Target Resource: {dns_ref.target_resource.id}")
    for dns_resource in dns_ref.dns_resources:
        print(f"  DNS Record: {dns_resource.id}")

Data Models

DnsResourceReferenceRequest

class DnsResourceReferenceRequest:
    """
    Request for finding DNS records that reference specific Azure resources.
    """
    target_resources: List[SubResource]  # List of Azure resource IDs to search for

DnsResourceReferenceResult

class DnsResourceReferenceResult:
    """
    Response containing DNS records that reference the requested target resources.
    """
    dns_resource_references: List[DnsResourceReference]  # List of DNS resource references found

DnsResourceReference

class DnsResourceReference:
    """
    Associates a target Azure resource with DNS records that reference it.
    """
    dns_resources: List[SubResource]  # DNS records that reference the target resource
    target_resource: SubResource      # The Azure resource being referenced

SubResource

class SubResource:
    """
    Reference to an Azure resource by its ID.
    """
    id: str  # Full Azure resource ID

Use Cases

Finding DNS Records for App Services

Discover which DNS records point to your Azure App Service:

from azure.mgmt.dns.models import DnsResourceReferenceRequest, SubResource

# App Service resource ID
app_service_id = "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/myapp-rg/providers/Microsoft.Web/sites/mywebapp"

request = DnsResourceReferenceRequest(
    target_resources=[SubResource(id=app_service_id)]
)

result = dns_client.dns_resource_reference.get_by_target_resources(request)

print(f"DNS records pointing to App Service '{app_service_id}':")
for dns_ref in result.dns_resource_references:
    if dns_ref.target_resource.id == app_service_id:
        for dns_resource in dns_ref.dns_resources:
            # Extract zone and record info from DNS resource ID
            resource_parts = dns_resource.id.split('/')
            zone_name = resource_parts[8]  # Zone name is at index 8
            record_name = resource_parts[10] if len(resource_parts) > 10 else "@"
            record_type = resource_parts[9] if len(resource_parts) > 9 else "Unknown"
            
            print(f"  Zone: {zone_name}")
            print(f"  Record: {record_name} ({record_type})")

Bulk Resource Lookup

Find DNS records for multiple Azure resources in a single request:

# Multiple resource types
target_resources = [
    # CDN endpoint
    SubResource(id="/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Cdn/profiles/mycdnprofile/endpoints/myendpoint"),
    
    # Traffic Manager profile
    SubResource(id="/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/trafficmanagerprofiles/mytmprofile"),
    
    # App Service
    SubResource(id="/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Web/sites/mywebapp"),
    
    # Public IP address
    SubResource(id="/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/publicIPAddresses/mypublicip")
]

request = DnsResourceReferenceRequest(target_resources=target_resources)
result = dns_client.dns_resource_reference.get_by_target_resources(request)

# Group DNS records by target resource
for dns_ref in result.dns_resource_references:
    target_id = dns_ref.target_resource.id
    resource_name = target_id.split('/')[-1]  # Extract resource name
    resource_type = target_id.split('/')[-3]  # Extract resource type
    
    print(f"\n{resource_type}: {resource_name}")
    print(f"Resource ID: {target_id}")
    print("DNS Records:")
    
    for dns_resource in dns_ref.dns_resources:
        print(f"  - {dns_resource.id}")

Integration with Other Operations

Combine resource reference lookup with record set operations:

from azure.mgmt.dns.models import DnsResourceReferenceRequest, SubResource

# Find existing DNS records for a resource
app_service_id = "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Web/sites/myapp"
request = DnsResourceReferenceRequest(target_resources=[SubResource(id=app_service_id)])
result = dns_client.dns_resource_reference.get_by_target_resources(request)

# Update TTL for all found DNS records
for dns_ref in result.dns_resource_references:
    for dns_resource in dns_ref.dns_resources:
        # Parse DNS resource ID to get zone and record details
        resource_parts = dns_resource.id.split('/')
        resource_group = resource_parts[4]
        zone_name = resource_parts[8]
        record_type = resource_parts[9]
        record_name = resource_parts[10] if len(resource_parts) > 10 else "@"
        
        # Get current record set
        try:
            record_set = dns_client.record_sets.get(
                resource_group_name=resource_group,
                zone_name=zone_name,
                relative_record_set_name=record_name,
                record_type=record_type
            )
            
            # Update TTL to 1 hour
            record_set.ttl = 3600
            
            # Save changes
            dns_client.record_sets.create_or_update(
                resource_group_name=resource_group,
                zone_name=zone_name,
                relative_record_set_name=record_name,
                record_type=record_type,
                parameters=record_set
            )
            
            print(f"Updated TTL for {record_name}.{zone_name} ({record_type})")
            
        except Exception as e:
            print(f"Failed to update {record_name}.{zone_name}: {e}")

Resource ID Patterns

Different Azure services have different resource ID patterns:

App Services

/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Web/sites/{site-name}

CDN Endpoints

/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Cdn/profiles/{profile-name}/endpoints/{endpoint-name}

Traffic Manager Profiles

/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/trafficmanagerprofiles/{profile-name}

Public IP Addresses

/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/publicIPAddresses/{ip-name}

Load Balancers

/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/loadBalancers/{lb-name}

Limitations and Considerations

Scope

  • Searches DNS records across all zones in the subscription
  • Only finds records that use Azure resource references (alias records or target_resource properties)
  • Does not find traditional DNS records that contain IP addresses or hostnames pointing to Azure resources

Performance

  • Results may be cached for performance
  • Large subscriptions with many DNS zones may experience longer response times
  • Consider limiting the number of target resources in a single request

Permissions

  • Requires DNS zone read permissions across the subscription
  • May return incomplete results if access is restricted to specific resource groups

Error Handling

from azure.core.exceptions import HttpResponseError

try:
    request = DnsResourceReferenceRequest(
        target_resources=[SubResource(id="invalid-resource-id")]
    )
    result = dns_client.dns_resource_reference.get_by_target_resources(request)
except HttpResponseError as e:
    if e.status_code == 400:
        print("Bad request: Invalid resource ID format")
    elif e.status_code == 403:
        print("Access denied: Insufficient permissions to access DNS zones")
    elif e.status_code == 404:
        print("Not found: One or more target resources don't exist")
    else:
        print(f"Unexpected error: {e.status_code} - {e.message}")

Common error scenarios:

  • 400 Bad Request: Malformed resource IDs in the request
  • 403 Forbidden: Insufficient permissions to read DNS zones
  • 404 Not Found: Target resources don't exist or are not accessible

Install with Tessl CLI

npx tessl i tessl/pypi-azure-mgmt-dns

docs

dns-record-sets.md

dns-resource-references.md

dns-zones.md

index.md

tile.json