Azure / azure-cli

Azure Command-Line Interface
MIT License
3.94k stars 2.92k forks source link

Azure DNS zone export failing #27579

Open mistabe opened 10 months ago

mistabe commented 10 months ago

Describe the bug

The export of the zone fails with a spurious error. The


KeyError: 'txt' ```
Suggests to me that perhaps the value in one of the text records is large enough to upset the processor or contains characters that are upsetting the export processers. 

### Related command

az network dns zone export -g "rg-bob-prod-uksouth-001" -n "bob.org.uk" -f "boborguk.txt"

### Errors

The command failed with an unexpected error. Here is the traceback:
'txt'
Traceback (most recent call last):
  File "/usr/lib64/az/lib/python3.9/site-packages/knack/cli.py", line 233, in invoke
    cmd_result = self.invocation.execute(args)
  File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/commands/__init__.py", line 663, in execute
    raise ex
  File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/commands/__init__.py", line 726, in _run_jobs_serially
    results.append(self._run_job(expanded_arg, cmd_copy))
  File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/commands/__init__.py", line 697, in _run_job
    result = cmd_copy(params)
  File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/commands/__init__.py", line 333, in __call__
    return self.handler(*args, **kwargs)
  File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/core/commands/command_operation.py", line 121, in handler
    return op(**command_args)
  File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/command_modules/network/custom.py", line 2637, in export_zone
    zone_file_content = make_zone_file(zone_obj)
  File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/command_modules/network/zone_file/make_zone_file.py", line 96, in make_zone_file
    getattr(record_processors, method)(zone_file, entry, record_set_name, first_line)
  File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/command_modules/network/zone_file/record_processors.py", line 134, in process_txt
    return process_rr(io, _quote_field(data, 'txt'), 'TXT', 'txt', name, print_name)
  File "/usr/lib64/az/lib/python3.9/site-packages/azure/cli/command_modules/network/zone_file/record_processors.py", line 55, in _quote_field
    for c in data[field]:
KeyError: 'txt'

### Issue script & Debug output

PS C:\Users\bobtheuser> az network dns zone export -g "rg-bob-prod-uksouth-001" -n "bob.org.uk" -f "boborguk.txt" --debug
cli.knack.cli: Command arguments: ['network', 'dns', 'zone', 'export', '-g', 'rg-bob-prod-uksouth-001', '-n', 'bob.org.uk', '-f', 'boborguk.txt', '--debug']
cli.knack.cli: __init__ debug log:
Enable color in terminal.
cli.knack.cli: Event: Cli.PreExecute []
cli.knack.cli: Event: CommandParser.OnGlobalArgumentsCreate [<function CLILogging.on_global_arguments at 0x00000225EF915240>, <function OutputProducer.on_global_arguments at 0x00000225EFA63EB0>, <function CLIQuery.on_global_arguments at 0x00000225EFCAD240>]
cli.knack.cli: Event: CommandInvoker.OnPreCommandTableCreate []
cli.azure.cli.core: Modules found from index for 'network': ['azure.cli.command_modules.network', 'azure.cli.command_modules.privatedns']
cli.azure.cli.core: Loading command modules:
cli.azure.cli.core: Name                  Load Time    Groups  Commands
cli.azure.cli.core: network                   0.928       115       457
cli.azure.cli.core: privatedns                0.064        14        60
cli.azure.cli.core: Total (2)                 0.993       129       517
cli.azure.cli.core: Loaded 128 groups, 517 commands.
cli.azure.cli.core: Found a match in the command table.
cli.azure.cli.core: Raw command  : network dns zone export
cli.azure.cli.core: Command table: network dns zone export
cli.knack.cli: Event: CommandInvoker.OnPreCommandTableTruncate [<function AzCliLogging.init_command_file_logging at 0x00000225F23303A0>]
cli.azure.cli.core.azlogging: metadata file logging enabled - writing logs to 'C:\Users\bobtheuser\.azure\commands\2023-10-11.16-27-43.network_dns_zone_export.10228.log'.
az_command_data_logger: command args: network dns zone export -g {} -n {} -f {} --debug
cli.knack.cli: Event: CommandInvoker.OnPreArgumentLoad [<function register_global_subscription_argument.<locals>.add_subscription_parameter at 0x00000225F2333010>]
cli.knack.cli: Event: CommandInvoker.OnPostArgumentLoad []
cli.knack.cli: Event: CommandInvoker.OnPostCommandTableCreate [<function register_ids_argument.<locals>.add_ids_arguments at 0x00000225F237D000>, <function register_cache_arguments.<locals>.add_cache_arguments at 0x00000225F237D120>]
cli.knack.cli: Event: CommandInvoker.OnCommandTableLoaded []
cli.knack.cli: Event: CommandInvoker.OnPreParseArgs []
cli.knack.cli: Event: CommandInvoker.OnPostParseArgs [<function OutputProducer.handle_output_argument at 0x00000225EFA63F40>, <function CLIQuery.handle_query_parameter at 0x00000225EFCAD2D0>, <function register_ids_argument.<locals>.parse_ids_arguments at 0x00000225F237D090>]
cli.azure.cli.core.auth.persistence: build_persistence: location='C:\\Users\\bobtheuser\\.azure\\msal_token_cache.bin', encrypt=True
cli.azure.cli.core.auth.binary_cache: load: C:\Users\bobtheuser\.azure\msal_http_cache.bin
urllib3.util.retry: Converted retries value: 1 -> Retry(total=1, connect=None, read=None, redirect=None, status=None)
msal.authority: openid_config = {'token_endpoint': 'https://login.microsoftonline.com/dde335a7-fb4a-4058-9c07-82fa79294243/oauth2/v2.0/token', 'token_endpoint_auth_methods_supported': ['client_secret_post', 'private_key_jwt', 'client_secret_basic'], 'jwks_uri': 'https://login.microsoftonline.com/dde335a7-fb4a-4058-9c07-82fa79294243/discovery/v2.0/keys', 'response_modes_supported': ['query', 'fragment', 'form_post'], 'subject_types_supported': ['pairwise'], 'id_token_signing_alg_values_supported': ['RS256'], 'response_types_supported': ['code', 'id_token', 'code id_token', 'id_token token'], 'scopes_supported': ['openid', 'profile', 'email', 'offline_access'], 'issuer': 'https://login.microsoftonline.com/dde335a7-fb4a-4058-9c07-82fa79294243/v2.0', 'request_uri_parameter_supported': False, 'userinfo_endpoint': 'https://graph.microsoft.com/oidc/userinfo', 'authorization_endpoint': 'https://login.microsoftonline.com/dde335a7-fb4a-4058-9c07-82fa79294243/oauth2/v2.0/authorize', 'device_authorization_endpoint': 'https://login.microsoftonline.com/dde335a7-fb4a-4058-9c07-82fa79294243/oauth2/v2.0/devicecode', 'http_logout_supported': True, 'frontchannel_logout_supported': True, 'end_session_endpoint': 'https://login.microsoftonline.com/dde335a7-fb4a-4058-9c07-82fa79294243/oauth2/v2.0/logout', 'claims_supported': ['sub', 'iss', 'cloud_instance_name', 'cloud_instance_host_name', 'cloud_graph_host_name', 'msgraph_host', 'aud', 'exp', 'iat', 'auth_time', 'acr', 'nonce', 'preferred_username', 'name', 'tid', 'ver', 'at_hash', 'c_hash', 'email'], 'kerberos_endpoint': 'https://login.microsoftonline.com/dde335a7-fb4a-4058-9c07-82fa79294243/kerberos', 'tenant_region_scope': 'EU', 'cloud_instance_name': 'microsoftonline.com', 'cloud_graph_host_name': 'graph.windows.net', 'msgraph_host': 'graph.microsoft.com', 'rbac_url': 'https://pas.windows.net'}
msal.application: Broker enabled? False
cli.azure.cli.core.auth.credential_adaptor: CredentialAdaptor.get_token: scopes=('https://management.core.windows.net//.default',), kwargs={}
cli.azure.cli.core.auth.msal_authentication: UserCredential.get_token: scopes=('https://management.core.windows.net//.default',), claims=None, kwargs={}
msal.application: Found 1 RTs matching {'environment': 'login.microsoftonline.com', 'home_account_id': '********.dde335a7-fb4a-4058-9c07-82fa79294243', 'family_id': '1'}
msal.telemetry: Generate or reuse correlation_id: 64dbb478-9d21-41ef-a6ae-18f5127f150f
msal.application: Cache attempts an RT
urllib3.connectionpool: Starting new HTTPS connection (1): login.microsoftonline.com:443
urllib3.connectionpool: https://login.microsoftonline.com:443 "POST /dde335a7-fb4a-4058-9c07-82fa79294243/oauth2/v2.0/token HTTP/1.1" 200 6826
msal.token_cache: event={
    "client_id": "04b07795-8ddb-461a-bbee-02f9e1bf7b46",
    "data": {
        "claims": "{\"access_token\": {\"xms_cc\": {\"values\": [\"CP1\"]}}}",
        "refresh_token": "********",
        "scope": [
            "https://management.core.windows.net//.default",
            "openid",
            "profile",
            "offline_access"
        ]
    },
    "environment": "login.microsoftonline.com",
    "grant_type": "refresh_token",
    "params": null,
    "response": {
        "access_token": "********",
        "client_info": "eyJ1aWQiOiJjYTE0OGJjMS0wNzg5LTRiNTMtOGE0OS1lZjU2NWQ4YTcwMDciLCJ1dGlkIjoiZGRlMzM1YTctZmI0YS00MDU4LTljMDctODJmYTc5Mjk0MjQzIn0",
        "expires_in": 4075,
        "ext_expires_in": 4075,
        "foci": "1",
        "id_token": "********",
        "scope": "https://management.core.windows.net//user_impersonation https://management.core.windows.net//.default",
        "token_type": "Bearer"
    },
    "scope": [
        "https://management.core.windows.net//user_impersonation",
        "https://management.core.windows.net//.default"
    ],
    "skip_account_creation": true,
    "token_endpoint": "https://login.microsoftonline.com/dde335a7-fb4a-4058-9c07-82fa79294243/oauth2/v2.0/token"
}
cli.azure.cli.core.sdk.policies: Request URL: 'https://management.azure.com/subscriptions/cb700f88-efbf-4477-8d77-a0d9659a4e6c/resourceGroups/rg-bob-prod-uksouth-001/providers/Microsoft.Network/dnsZones/bob.org.uk/recordsets?api-version=2023-07-01-preview'
cli.azure.cli.core.sdk.policies: Request method: 'GET'
cli.azure.cli.core.sdk.policies: Request headers:
cli.azure.cli.core.sdk.policies:     'Accept': 'application/json'
cli.azure.cli.core.sdk.policies:     'x-ms-client-request-id': 'b8954cd2-684a-11ee-b863-00249b680bc9'
cli.azure.cli.core.sdk.policies:     'CommandName': 'network dns zone export'
cli.azure.cli.core.sdk.policies:     'ParameterSetName': '-g -n -f --debug'
cli.azure.cli.core.sdk.policies:     'User-Agent': 'AZURECLI/2.53.0 (MSI) (AAZ) azsdk-python-core/1.26.0 Python/3.10.10 (Windows-10-10.0.19045-SP0)'
cli.azure.cli.core.sdk.policies:     'Authorization': '*****'
cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: This request has no body
urllib3.connectionpool: Starting new HTTPS connection (1): management.azure.com:443
urllib3.connectionpool: https://management.azure.com:443 "GET /subscriptions/cb700f88-efbf-4477-8d77-a0d9659a4e6c/resourceGroups/rg-bob-prod-uksouth-001/providers/Microsoft.Network/dnsZones/bob.org.uk/recordsets?api-version=2023-07-01-preview HTTP/1.1" 200 None
cli.azure.cli.core.sdk.policies: Response status: 200
cli.azure.cli.core.sdk.policies: Response headers:
cli.azure.cli.core.sdk.policies:     'Cache-Control': 'private'
cli.azure.cli.core.sdk.policies:     'Transfer-Encoding': 'chunked'
cli.azure.cli.core.sdk.policies:     'Content-Type': 'application/json; charset=utf-8'
cli.azure.cli.core.sdk.policies:     'Content-Encoding': 'gzip'
cli.azure.cli.core.sdk.policies:     'Vary': 'Accept-Encoding'
cli.azure.cli.core.sdk.policies:     'X-Content-Type-Options': 'nosniff'
cli.azure.cli.core.sdk.policies:     'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'
cli.azure.cli.core.sdk.policies:     'x-ms-request-id': 'b8954cd2-684a-11ee-b863-00249b680bc9'
cli.azure.cli.core.sdk.policies:     'Server': 'Microsoft-IIS/10.0'
cli.azure.cli.core.sdk.policies:     'X-Powered-By': 'ASP.NET'
cli.azure.cli.core.sdk.policies:     'x-ms-ratelimit-remaining-subscription-resource-requests': '499'
cli.azure.cli.core.sdk.policies:     'x-ms-ratelimit-remaining-subscription-resource-entities-read': '59900'
cli.azure.cli.core.sdk.policies:     'x-ms-correlation-request-id': '04a3eded-2cd6-4b20-8183-158aba44d09c'
cli.azure.cli.core.sdk.policies:     'x-ms-routing-request-id': 'UKSOUTH:20231011T152743Z:04a3eded-2cd6-4b20-8183-158aba44d09c'
cli.azure.cli.core.sdk.policies:     'Date': 'Wed, 11 Oct 2023 15:27:42 GMT'
cli.azure.cli.core.sdk.policies: Response content:
**OMITTED**
cli.azure.cli.core.sdk.policies: Request URL: 'https://management.azure.com:443/subscriptions/cb700f88-efbf-4477-8d77-a0d9659a4e6c/resourceGroups/rg-bob-prod-uksouth-001/providers/Microsoft.Network/dnszones/bob.org.uk/ALL?api-version=2023-07-01-preview&$skipToken=ZW50ZXJwcmlzZWVucm9sbG1lbnQvNQ%3D%3D'
cli.azure.cli.core.sdk.policies: Request method: 'GET'
cli.azure.cli.core.sdk.policies: Request headers:
cli.azure.cli.core.sdk.policies:     'Accept': 'application/json'
cli.azure.cli.core.sdk.policies:     'x-ms-client-request-id': 'b8954cd2-684a-11ee-b863-00249b680bc9'
cli.azure.cli.core.sdk.policies:     'CommandName': 'network dns zone export'
cli.azure.cli.core.sdk.policies:     'ParameterSetName': '-g -n -f --debug'
cli.azure.cli.core.sdk.policies:     'User-Agent': 'AZURECLI/2.53.0 (MSI) (AAZ) azsdk-python-core/1.26.0 Python/3.10.10 (Windows-10-10.0.19045-SP0)'
cli.azure.cli.core.sdk.policies:     'Authorization': '*****'
cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: This request has no body
urllib3.connectionpool: https://management.azure.com:443 "GET /subscriptions/cb700f88-efbf-4477-8d77-a0d9659a4e6c/resourceGroups/rg-bob-prod-uksouth-001/providers/Microsoft.Network/dnszones/bob.org.uk/ALL?api-version=2023-07-01-preview&$skipToken=ZW50ZXJwcmlzZWVucm9sbG1lbnQvNQ%3D%3D HTTP/1.1" 200 None
cli.azure.cli.core.sdk.policies: Response status: 200
cli.azure.cli.core.sdk.policies: Response headers:
cli.azure.cli.core.sdk.policies:     'Cache-Control': 'private'
cli.azure.cli.core.sdk.policies:     'Transfer-Encoding': 'chunked'
cli.azure.cli.core.sdk.policies:     'Content-Type': 'application/json; charset=utf-8'
cli.azure.cli.core.sdk.policies:     'Content-Encoding': 'gzip'
cli.azure.cli.core.sdk.policies:     'Vary': 'Accept-Encoding'
cli.azure.cli.core.sdk.policies:     'X-Content-Type-Options': 'nosniff'
cli.azure.cli.core.sdk.policies:     'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'
cli.azure.cli.core.sdk.policies:     'x-ms-request-id': 'b8954cd2-684a-11ee-b863-00249b680bc9'
cli.azure.cli.core.sdk.policies:     'Server': 'Microsoft-IIS/10.0'
cli.azure.cli.core.sdk.policies:     'X-Powered-By': 'ASP.NET'
cli.azure.cli.core.sdk.policies:     'x-ms-ratelimit-remaining-subscription-resource-requests': '499'
cli.azure.cli.core.sdk.policies:     'x-ms-ratelimit-remaining-subscription-resource-entities-read': '59900'
cli.azure.cli.core.sdk.policies:     'x-ms-correlation-request-id': '6e4297a3-fda9-4255-afb7-739ac94ac9a8'
cli.azure.cli.core.sdk.policies:     'x-ms-routing-request-id': 'UKSOUTH:20231011T152743Z:6e4297a3-fda9-4255-afb7-739ac94ac9a8'
cli.azure.cli.core.sdk.policies:     'Date': 'Wed, 11 Oct 2023 15:27:42 GMT'
cli.azure.cli.core.sdk.policies: Response content:
**OMITTED**
cli.azure.cli.core.sdk.policies: Request URL: 'https://management.azure.com:443/subscriptions/cb700f88-efbf-4477-8d77-a0d9659a4e6c/resourceGroups/rg-bob-prod-uksouth-001/providers/Microsoft.Network/dnszones/bob.org.uk/ALL?api-version=2023-07-01-preview&$skipToken=d3d3L19hY21lLWNoYWxsZW5nZS8xNg%3D%3D'
cli.azure.cli.core.sdk.policies: Request method: 'GET'
cli.azure.cli.core.sdk.policies: Request headers:
cli.azure.cli.core.sdk.policies:     'Accept': 'application/json'
cli.azure.cli.core.sdk.policies:     'x-ms-client-request-id': 'b8954cd2-684a-11ee-b863-00249b680bc9'
cli.azure.cli.core.sdk.policies:     'CommandName': 'network dns zone export'
cli.azure.cli.core.sdk.policies:     'ParameterSetName': '-g -n -f --debug'
cli.azure.cli.core.sdk.policies:     'User-Agent': 'AZURECLI/2.53.0 (MSI) (AAZ) azsdk-python-core/1.26.0 Python/3.10.10 (Windows-10-10.0.19045-SP0)'
cli.azure.cli.core.sdk.policies:     'Authorization': '*****'
cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: This request has no body
urllib3.connectionpool: https://management.azure.com:443 "GET /subscriptions/cb700f88-efbf-4477-8d77-a0d9659a4e6c/resourceGroups/rg-bob-prod-uksouth-001/providers/Microsoft.Network/dnszones/bob.org.uk/ALL?api-version=2023-07-01-preview&$skipToken=d3d3L19hY21lLWNoYWxsZW5nZS8xNg%3D%3D HTTP/1.1" 200 None
cli.azure.cli.core.sdk.policies: Response status: 200
cli.azure.cli.core.sdk.policies: Response headers:
cli.azure.cli.core.sdk.policies:     'Cache-Control': 'private'
cli.azure.cli.core.sdk.policies:     'Transfer-Encoding': 'chunked'
cli.azure.cli.core.sdk.policies:     'Content-Type': 'application/json; charset=utf-8'
cli.azure.cli.core.sdk.policies:     'Content-Encoding': 'gzip'
cli.azure.cli.core.sdk.policies:     'Vary': 'Accept-Encoding'
cli.azure.cli.core.sdk.policies:     'X-Content-Type-Options': 'nosniff'
cli.azure.cli.core.sdk.policies:     'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'
cli.azure.cli.core.sdk.policies:     'x-ms-request-id': 'b8954cd2-684a-11ee-b863-00249b680bc9'
cli.azure.cli.core.sdk.policies:     'Server': 'Microsoft-IIS/10.0'
cli.azure.cli.core.sdk.policies:     'X-Powered-By': 'ASP.NET'
cli.azure.cli.core.sdk.policies:     'x-ms-ratelimit-remaining-subscription-resource-requests': '498'
cli.azure.cli.core.sdk.policies:     'x-ms-ratelimit-remaining-subscription-resource-entities-read': '59899'
cli.azure.cli.core.sdk.policies:     'x-ms-correlation-request-id': 'd0a9b2ad-52ce-45e1-a568-5afe5c3c1134'
cli.azure.cli.core.sdk.policies:     'x-ms-routing-request-id': 'UKSOUTH:20231011T152743Z:d0a9b2ad-52ce-45e1-a568-5afe5c3c1134'
cli.azure.cli.core.sdk.policies:     'Date': 'Wed, 11 Oct 2023 15:27:42 GMT'
cli.azure.cli.core.sdk.policies: Response content:
cli.azure.cli.core.sdk.policies: {"value":[{"id":"\/subscriptions\/cb700f88-efbf-4477-8d77-a0d9659a4e6c\/resourceGroups\/rg-bob-prod-uksouth-001\/providers\/Microsoft.Network\/dnszones\/bob.org.uk\/CNAME\/zkipster53685","name":"zkipster53685","type":"Microsoft.Network\/dnszones\/CNAME","etag":"53598900-3760-47e3-a0e4-c353bcc7aba5","properties":{"fqdn":"zkipster53685.bob.org.uk.","TTL":3600,"CNAMERecord":{"cname":"u2706795.wl046.sendgrid.net"},"targetResource":{},"provisioningState":"Succeeded"}}]}
cli.azure.cli.core.azclierror: Traceback (most recent call last):
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 233, in invoke
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 663, in execute
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 726, in _run_jobs_serially
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 697, in _run_job
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 333, in __call__
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/command_operation.py", line 121, in handler
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/custom.py", line 2637, in export_zone
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/zone_file/make_zone_file.py", line 96, in make_zone_file
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/zone_file/record_processors.py", line 134, in process_txt
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/zone_file/record_processors.py", line 55, in _quote_field
KeyError: 'txt'

cli.azure.cli.core.azclierror: The command failed with an unexpected error. Here is the traceback:
az_command_data_logger: The command failed with an unexpected error. Here is the traceback:
cli.azure.cli.core.azclierror: 'txt'
Traceback (most recent call last):
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 233, in invoke
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 663, in execute
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 726, in _run_jobs_serially
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 697, in _run_job
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 333, in __call__
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/command_operation.py", line 121, in handler
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/custom.py", line 2637, in export_zone
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/zone_file/make_zone_file.py", line 96, in make_zone_file
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/zone_file/record_processors.py", line 134, in process_txt
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/zone_file/record_processors.py", line 55, in _quote_field
KeyError: 'txt'
az_command_data_logger: 'txt'
Traceback (most recent call last):
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 233, in invoke
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 663, in execute
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 726, in _run_jobs_serially
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 697, in _run_job
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 333, in __call__
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/command_operation.py", line 121, in handler
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/custom.py", line 2637, in export_zone
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/zone_file/make_zone_file.py", line 96, in make_zone_file
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/zone_file/record_processors.py", line 134, in process_txt
  File "D:\a\_work\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/network/zone_file/record_processors.py", line 55, in _quote_field
KeyError: 'txt'
To check existing issues, please visit: https://github.com/Azure/azure-cli/issues
cli.knack.cli: Event: Cli.PostExecute [<function AzCliLogging.deinit_cmd_metadata_logging at 0x00000225F23305E0>]
az_command_data_logger: exit code: 1
cli.__main__: Command ran in 2.715 seconds (init: 0.552, invoke: 2.162)
telemetry.main: Begin splitting cli events and extra events, total events: 1
telemetry.client: Accumulated 0 events. Flush the clients.
telemetry.main: Finish splitting cli events and extra events, cli events: 1
telemetry.save: Save telemetry record of length 6960 in cache
telemetry.main: Begin creating telemetry upload process.
telemetry.process: Creating upload process: "C:\Program Files\Microsoft SDKs\Azure\CLI2\python.exe C:\Program Files\Microsoft SDKs\Azure\CLI2\Lib\site-packages\azure\cli\telemetry\__init__.pyc C:\Users\bobtheuser\.azure"
telemetry.process: Return from creating process
telemetry.main: Finish creating telemetry upload process.

### Expected behavior

This command fails on a particular zone in our Azure DNS resources, the one which is important and has the most record sets. 

### Environment Summary

azure-cli                         2.53.0

core                              2.53.0
telemetry                          1.1.0

Dependencies:
msal                            1.24.0b2
azure-mgmt-resource             23.1.0b2

Python location 'C:\Program Files\Microsoft SDKs\Azure\CLI2\python.exe'
Extensions directory 'C:\Users\bob\.azure\cliextensions'

Python (Windows) 3.10.10 (tags/v3.10.10:aad5f6a, Feb  7 2023, 17:20:36) [MSC v.1929 64 bit (AMD64)]

Legal docs and information: aka.ms/AzureCliLegal

Your CLI is up-to-date.

### Additional context

_No response_
yonzhan commented 10 months ago

Thank you for opening this issue, we will look into it.

rmalayter commented 3 months ago

I am having the same issue with one of my Azure public DNS zones. We do have a large-ish TXT record in there (thanks SPF/DKIM!) but the error message doesn't specify exactly what is causing the parse error. I would assume python can handle strings longer than a few KB so is length truly the root cause?

rmalayter commented 3 months ago

Update, I did notice we have a Let's Encrypt-generated _acme-challenge.example.com TXT record where the value starts with a hyphen (actual value is very similar to -rYJcTo0vUmJ8MFmEkegMg8ReuVl1a-8dBmBurWpMko This is perfectly valid in DNS RFCs but could it be causing an issue with az network dns zone export command?

rmalayter commented 2 months ago

I believe I have tracked this down. When a TXT record contains an empty string as its value, that is when the export fails. This is common for DNS validation records such as _acme-challenge recrods where a value is added to the recordset by automation and then removed post-validation. When I updated all our existing TXT records containing empty strings to contain "foo" instead the export worked.

Basically, this command needs to be updated to handle TXT recordsets with empty string values.

mistabe commented 2 months ago

@rmalayter Yes yes! We had a single TXT record with an empty value. I've notified colleagues, removed that empty TXT record and BOOM. Export ran. Please MS, can you fix it for us now we know that's the problem?

rmalayter commented 2 months ago

I'll second the importance of this as most TLS certificates on the interwebs are issued by Let's Encrypt, and the Azure DNS validation for ACME certificate automation tools add and then remove a TXT validation record to Azure DNS. However if a delete lock is present (usually the case in production DNS zones!) an empty TXT record is the common result.