Microsoft Azure DNS Management Client Library for Python
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
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.
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}")class DnsResourceReferenceRequest:
"""
Request for finding DNS records that reference specific Azure resources.
"""
target_resources: List[SubResource] # List of Azure resource IDs to search forclass DnsResourceReferenceResult:
"""
Response containing DNS records that reference the requested target resources.
"""
dns_resource_references: List[DnsResourceReference] # List of DNS resource references foundclass 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 referencedclass SubResource:
"""
Reference to an Azure resource by its ID.
"""
id: str # Full Azure resource IDDiscover 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})")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}")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}")Different Azure services have different resource ID patterns:
/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Web/sites/{site-name}/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Cdn/profiles/{profile-name}/endpoints/{endpoint-name}/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/trafficmanagerprofiles/{profile-name}/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/publicIPAddresses/{ip-name}/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Network/loadBalancers/{lb-name}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:
Install with Tessl CLI
npx tessl i tessl/pypi-azure-mgmt-dns