Skip to content

Commit a58376c

Browse files
WhiteHorseVSandeep Kadagathur Vadiraj
andauthored
{Network} az network dns record-set naptr: Naptr feature tests and fixes (#30055)
* feature-naptr * NAPTR azcli small fixes * Naptr recordings * Fix len of tests * Naptr test fix for ttl comparison * Fix empty regexp test * Empty regexp fix * Fix the backslash expectations in regexp * Naptr empty regexp handling * Comment NS in tests * Style fixes * Naptr check fixes * More naptr regexp handling * naptr regexp handling * Change it to original values * NAPTR test updates and Zone import fixes * Naptr import/export logic fixes * Update with import zone recordings --------- Co-authored-by: Sandeep Kadagathur Vadiraj <[email protected]>
1 parent 9160a98 commit a58376c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+6085
-4303
lines changed

src/azure-cli/azure/cli/command_modules/network/_help.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2266,6 +2266,84 @@
22662266
crafted: true
22672267
"""
22682268

2269+
helps['network dns record-set naptr'] = """
2270+
type: group
2271+
short-summary: Manage DNS NAPTR records.
2272+
"""
2273+
2274+
helps['network dns record-set naptr add-record'] = """
2275+
type: command
2276+
short-summary: Add a NAPTR record.
2277+
examples:
2278+
- name: Add a NAPTR record.
2279+
text: |
2280+
az network dns record-set naptr add-record -g MyResourceGroup -z www.mysite.com \\
2281+
-n MyRecordSet --flags "U" --order 10 --preference 20 --services "E2U+sip" --regexp "!^.*$!sip:[email protected]!" --replacement .
2282+
"""
2283+
2284+
helps['network dns record-set naptr create'] = """
2285+
type: command
2286+
short-summary: Create an empty NAPTR record set.
2287+
examples:
2288+
- name: Create an empty NAPTR record set.
2289+
text: az network dns record-set naptr create -g MyResourceGroup -z www.mysite.com -n MyRecordSet
2290+
- name: Create an empty NAPTR record set. (autogenerated)
2291+
text: |
2292+
az network dns record-set naptr create --name MyRecordSet --resource-group MyResourceGroup --ttl 30 --zone-name www.mysite.com
2293+
crafted: true
2294+
"""
2295+
2296+
helps['network dns record-set naptr delete'] = """
2297+
type: command
2298+
short-summary: Delete a NAPTR record set and all associated records.
2299+
examples:
2300+
- name: Delete a NAPTR record set and all associated records.
2301+
text: az network dns record-set naptr delete -g MyResourceGroup -z www.mysite.com -n MyRecordSet
2302+
"""
2303+
2304+
helps['network dns record-set naptr list'] = """
2305+
type: command
2306+
short-summary: List all NAPTR record sets in a zone.
2307+
examples:
2308+
- name: List all NAPTR record sets in a zone.
2309+
text: az network dns record-set naptr list -g MyResourceGroup -z www.mysite.com
2310+
"""
2311+
2312+
helps['network dns record-set naptr remove-record'] = """
2313+
type: command
2314+
short-summary: Remove a NAPTR record from its record set.
2315+
long-summary: >
2316+
By default, if the last record in a set is removed, the record set is deleted.
2317+
To retain the empty record set, include --keep-empty-record-set.
2318+
examples:
2319+
- name: Remove an NAPTR record from its record set.
2320+
text: |
2321+
az network dns record-set naptr remove-record -g MyResourceGroup -z www.mysite.com \\
2322+
-n MyRecordSet --flags "U" --order 10 --preference 20 --services "E2U+sip" --regexp "!^.*$!sip:[email protected]!" --replacement .
2323+
"""
2324+
2325+
helps['network dns record-set naptr show'] = """
2326+
type: command
2327+
short-summary: Get the details of a NAPTR record set.
2328+
examples:
2329+
- name: Get the details of a NAPTR record set.
2330+
text: az network dns record-set naptr show -g MyResourceGroup -n MyRecordSet -z www.mysite.com
2331+
"""
2332+
2333+
helps['network dns record-set naptr update'] = """
2334+
type: command
2335+
short-summary: Update a NAPTR record set.
2336+
examples:
2337+
- name: Update a NAPTR record set.
2338+
text: |
2339+
az network dns record-set naptr update -g MyResourceGroup -n MyRecordSet \\
2340+
-z www.mysite.com --metadata owner=WebTeam
2341+
- name: Update a NAPTR record set. (autogenerated)
2342+
text: |
2343+
az network dns record-set naptr update --name MyRecordSet --resource-group MyResourceGroup --set tags.CostCenter=MyBusinessGroup --zone-name www.mysite.com
2344+
crafted: true
2345+
"""
2346+
22692347
helps['network dns record-set ns'] = """
22702348
type: group
22712349
short-summary: Manage DNS NS records.

src/azure-cli/azure/cli/command_modules/network/_params.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,12 +313,12 @@ def load_arguments(self, _):
313313
for item in ['record_type', 'record_set_type']:
314314
c.argument(item, ignore_type, validator=validate_dns_record_type)
315315

316-
for item in ['', 'a', 'aaaa', 'caa', 'cname', 'ds', 'mx', 'ns', 'ptr', 'srv', 'tlsa', 'txt']:
316+
for item in ['', 'a', 'aaaa', 'caa', 'cname', 'ds', 'mx', 'naptr', 'ns', 'ptr', 'srv', 'tlsa', 'txt']:
317317
with self.argument_context('network dns record-set {} create'.format(item)) as c:
318318
c.argument('ttl', type=int, help='Record set TTL (time-to-live)')
319319
c.argument('if_none_match', help='Create the record set only if it does not already exist.', action='store_true')
320320

321-
for item in ['a', 'aaaa', 'caa', 'cname', 'ds', 'mx', 'ns', 'ptr', 'srv', 'tlsa', 'txt']:
321+
for item in ['a', 'aaaa', 'caa', 'cname', 'ds', 'mx', 'naptr', 'ns', 'ptr', 'srv', 'tlsa', 'txt']:
322322
with self.argument_context('network dns record-set {} add-record'.format(item)) as c:
323323
c.argument('ttl', type=int, help='Record set TTL (time-to-live)')
324324
c.argument('record_set_name',
@@ -367,6 +367,14 @@ def load_arguments(self, _):
367367
c.argument('exchange', options_list=['--exchange', '-e'], help='Exchange metric.')
368368
c.argument('preference', options_list=['--preference', '-p'], help='Preference metric.')
369369

370+
with self.argument_context('network dns record-set naptr') as c:
371+
c.argument('order', help='The order in which the NAPTR records MUST be processed in order to accurately represent the ordered list of rules. The ordering is from lowest to highest. Valid values: 0-65535.', type=int)
372+
c.argument('preference', help='The preference specifies the order in which NAPTR records with equal "order" values should be processed, low numbers being processed before high numbers. Valid values: 0-65535.', type=int)
373+
c.argument('flags', help='The flags specific to DDDS applications. Values currently defined in RFC 3404 are uppercase and lowercase letters "A", "P", "S", and "U", and the empty string, "". Enclose Flags in quotation marks.')
374+
c.argument('services', help='The services specific to DDDS applications. Enclose Services in quotation marks.')
375+
c.argument('regexp', help='The regular expression that the DDDS application uses to convert an input value into an output value. For example: an IP phone system might use a regular expression to convert a phone number that is entered by a user into a SIP URI. Enclose the regular expression in quotation marks. Specify either a value for "regexp" or a value for "replacement".')
376+
c.argument('replacement', help='The replacement is a fully qualified domain name (FQDN) of the next domain name that you want the DDDS application to submit a DNS query for. The DDDS application replaces the input value with the value specified for replacement. Specify either a value for "regexp" or a value for "replacement". If you specify a value for "regexp", specify a dot (.) for "replacement".')
377+
370378
with self.argument_context('network dns record-set ns') as c:
371379
c.argument('dname', options_list=['--nsdname', '-d'], help='Name server domain name.')
372380

src/azure-cli/azure/cli/command_modules/network/_validators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ def validate_ssl_cert(namespace):
220220

221221
def validate_dns_record_type(namespace):
222222
tokens = namespace.command.split(' ')
223-
types = ['a', 'aaaa', 'caa', 'cname', 'ds', 'mx', 'ns', 'ptr', 'soa', 'srv', 'tlsa', 'txt']
223+
types = ['a', 'aaaa', 'caa', 'cname', 'ds', 'mx', 'naptr', 'ns', 'ptr', 'soa', 'srv', 'tlsa', 'txt']
224224
for token in tokens:
225225
if token in types:
226226
if hasattr(namespace, 'record_type'):

src/azure-cli/azure/cli/command_modules/network/azure_stack/zone_file/parse_zone_file.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
* PTR records must have a non-empty name
3333
* currently only supports the following:
3434
'$ORIGIN', '$TTL', 'SOA', 'NS', 'A', 'AAAA', 'CNAME', 'MX', 'PTR',
35-
'TXT', 'SRV', 'SPF', 'URI', 'CAA'
35+
'TXT', 'SRV', 'SPF', 'URI', 'CAA', 'NAPTR'
3636
"""
3737

3838
import copy
@@ -67,6 +67,7 @@
6767
'caa': r'(?P<name>[@\*\w\.-]*)\s+(?:(?P<ttl>\d+\w*)\s+)?(?:(?P<class>in)\s+)?(?P<delim>caa)\s+(?P<flags>\d+)\s+(?P<tag>\w+)\s+(?P<val>.+)',
6868
'cname': r'(?P<name>[@\*\w\.-]*)\s+(?:(?P<ttl>\d+\w*)\s+)?(?:(?P<class>in)\s+)?(?P<delim>cname)\s+(?P<alias>[@\w\.-]+)',
6969
'mx': r'(?P<name>[@\*\w\.-]*)\s+(?:(?P<ttl>\d+\w*)\s+)?(?:(?P<class>in)\s+)?(?P<delim>mx)\s+(?P<preference>\d+)\s+(?P<host>[@\w\.-]+)',
70+
'naptr': r'(?P<name>[@\*\w\.-]*)\s+(?:(?P<ttl>\d+\w*)\s+)?(?:(?P<class>in)\s+)?(?P<delim>naptr)\s+(?P<order>\d+)\s+(?P<preference>\d+)\s+"(?P<flags>[^"]*)"\s+"(?P<services>[^"]*)"\s+"(?P<regexp>[^"]*)"\s+(?P<replacement>[\w.-]+)\.?',
7071
'txt': r'(?P<name>[@\*\w\.-]*)\s+(?:(?P<ttl>\d+\w*)\s+)?(?:(?P<class>in)\s+)?(?P<delim>txt)\s+(?P<txt>.+)',
7172
'ptr': r'(?P<name>[@\*\w\.-]*)\s+(?:(?P<ttl>\d+\w*)\s+)?(?:(?P<class>in)\s+)?(?P<delim>ptr)\s+(?P<host>[\w\.-]+)',
7273
'srv': r'(?P<name>[@\*\w\.-]*)\s+(?:(?P<ttl>\d+\w*)\s+)?(?:(?P<class>in)\s+)?(?P<delim>srv)\s+(?P<priority>\d+)\s+(?P<weight>\d+)\s+(?P<port>\d+)\s+(?P<target>[@\w\.-]+)',

src/azure-cli/azure/cli/command_modules/network/commands.py

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,8 @@ def load_command_table(self, _):
198198
g.custom_command('export', 'export_zone')
199199
g.custom_command('create', 'create_dns_zone', table_transformer=transform_dns_zone_table_output)
200200

201-
supported_records = ['a', 'aaaa', 'ds', 'mx', 'ns', 'ptr', 'srv', 'tlsa', 'txt', 'caa']
202-
experimental_records = ['ds', 'tlsa']
201+
supported_records = ['a', 'aaaa', 'ds', 'mx', 'naptr', 'ns', 'ptr', 'srv', 'tlsa', 'txt', 'caa']
202+
experimental_records = ['ds', 'naptr', 'tlsa']
203203
for record in supported_records:
204204
is_experimental = record in experimental_records
205205
with self.command_group('network dns record-set {}'.format(record), is_experimental=is_experimental) as g:
@@ -215,14 +215,16 @@ def load_command_table(self, _):
215215

216216
from .operations.dns import RecordSetAShow as DNSRecordSetAShow, RecordSetAAAAShow as DNSRecordSetAAAAShow, \
217217
RecordSetDSShow as DNSRecordSetDSShow, RecordSetMXShow as DNSRecordSetMXShow, \
218-
RecordSetNSShow as DNSRecordSetNSShow, RecordSetPTRShow as DNSRecordSetPTRShow, \
219-
RecordSetSRVShow as DNSRecordSetSRVShow, RecordSetTLSAShow as DNSRecordSetTLSAShow, \
220-
RecordSetTXTShow as DNSRecordSetTXTShow, RecordSetCAAShow as DNSRecordSetCAAShow, \
221-
RecordSetCNAMEShow as DNSRecordSetCNAMEShow, RecordSetSOAShow as DNSRecordSetSOAShow
218+
RecordSetNAPTRShow as DNSRecordSetNAPTRShow, RecordSetNSShow as DNSRecordSetNSShow, \
219+
RecordSetPTRShow as DNSRecordSetPTRShow, RecordSetSRVShow as DNSRecordSetSRVShow, \
220+
RecordSetTLSAShow as DNSRecordSetTLSAShow, RecordSetTXTShow as DNSRecordSetTXTShow, \
221+
RecordSetCAAShow as DNSRecordSetCAAShow, RecordSetCNAMEShow as DNSRecordSetCNAMEShow, \
222+
RecordSetSOAShow as DNSRecordSetSOAShow
222223
self.command_table["network dns record-set a show"] = DNSRecordSetAShow(loader=self)
223224
self.command_table["network dns record-set aaaa show"] = DNSRecordSetAAAAShow(loader=self)
224225
self.command_table["network dns record-set ds show"] = DNSRecordSetDSShow(loader=self)
225226
self.command_table["network dns record-set mx show"] = DNSRecordSetMXShow(loader=self)
227+
self.command_table["network dns record-set naptr show"] = DNSRecordSetNAPTRShow(loader=self)
226228
self.command_table["network dns record-set ns show"] = DNSRecordSetNSShow(loader=self)
227229
self.command_table["network dns record-set ptr show"] = DNSRecordSetPTRShow(loader=self)
228230
self.command_table["network dns record-set srv show"] = DNSRecordSetSRVShow(loader=self)
@@ -234,14 +236,15 @@ def load_command_table(self, _):
234236

235237
from .operations.dns import RecordSetAList as DNSRecordSetAList, RecordSetAAAAList as DNSRecordSetAAAAList, \
236238
RecordSetDSList as DNSRecordSetDSList, RecordSetMXList as DNSRecordSetMXList, \
237-
RecordSetNSList as DNSRecordSetNSList, RecordSetPTRList as DNSRecordSetPTRList, \
238-
RecordSetSRVList as DNSRecordSetSRVList, RecordSetTLSAList as DNSRecordSetTLSAList, \
239-
RecordSetTXTList as DNSRecordSetTXTList, RecordSetCAAList as DNSRecordSetCAAList, \
240-
RecordSetCNAMEList as DNSRecordSetCNAMEList
239+
RecordSetNAPTRList as DNSRecordSetNAPTRList, RecordSetNSList as DNSRecordSetNSList, \
240+
RecordSetPTRList as DNSRecordSetPTRList, RecordSetSRVList as DNSRecordSetSRVList, \
241+
RecordSetTLSAList as DNSRecordSetTLSAList, RecordSetTXTList as DNSRecordSetTXTList, \
242+
RecordSetCAAList as DNSRecordSetCAAList, RecordSetCNAMEList as DNSRecordSetCNAMEList
241243
self.command_table["network dns record-set a list"] = DNSRecordSetAList(loader=self)
242244
self.command_table["network dns record-set aaaa list"] = DNSRecordSetAAAAList(loader=self)
243245
self.command_table["network dns record-set ds list"] = DNSRecordSetDSList(loader=self)
244246
self.command_table["network dns record-set mx list"] = DNSRecordSetMXList(loader=self)
247+
self.command_table["network dns record-set naptr list"] = DNSRecordSetNAPTRList(loader=self)
245248
self.command_table["network dns record-set ns list"] = DNSRecordSetNSList(loader=self)
246249
self.command_table["network dns record-set ptr list"] = DNSRecordSetPTRList(loader=self)
247250
self.command_table["network dns record-set srv list"] = DNSRecordSetSRVList(loader=self)
@@ -252,14 +255,15 @@ def load_command_table(self, _):
252255

253256
from .operations.dns import RecordSetACreate as DNSRecordSetACreate, RecordSetAAAACreate as DNSRecordSetAAAACreate, \
254257
RecordSetDSCreate as DNSRecordSetDSCreate, RecordSetMXCreate as DNSRecordSetMXCreate, \
255-
RecordSetNSCreate as DNSRecordSetNSCreate, RecordSetPTRCreate as DNSRecordSetPTRCreate, \
256-
RecordSetSRVCreate as DNSRecordSetSRVCreate, RecordSetTLSACreate as DNSRecordSetTLSACreate, \
257-
RecordSetTXTCreate as DNSRecordSetTXTCreate, RecordSetCAACreate as DNSRecordSetCAACreate, \
258-
RecordSetCNAMECreate as DNSRecordSetCNAMECreate
258+
RecordSetNAPTRCreate as DNSRecordSetNAPTRCreate, RecordSetNSCreate as DNSRecordSetNSCreate, \
259+
RecordSetPTRCreate as DNSRecordSetPTRCreate, RecordSetSRVCreate as DNSRecordSetSRVCreate, \
260+
RecordSetTLSACreate as DNSRecordSetTLSACreate, RecordSetTXTCreate as DNSRecordSetTXTCreate, \
261+
RecordSetCAACreate as DNSRecordSetCAACreate, RecordSetCNAMECreate as DNSRecordSetCNAMECreate
259262
self.command_table["network dns record-set a create"] = DNSRecordSetACreate(loader=self)
260263
self.command_table["network dns record-set aaaa create"] = DNSRecordSetAAAACreate(loader=self)
261264
self.command_table["network dns record-set ds create"] = DNSRecordSetDSCreate(loader=self)
262265
self.command_table["network dns record-set mx create"] = DNSRecordSetMXCreate(loader=self)
266+
self.command_table["network dns record-set naptr create"] = DNSRecordSetNAPTRCreate(loader=self)
263267
self.command_table["network dns record-set ns create"] = DNSRecordSetNSCreate(loader=self)
264268
self.command_table["network dns record-set ptr create"] = DNSRecordSetPTRCreate(loader=self)
265269
self.command_table["network dns record-set srv create"] = DNSRecordSetSRVCreate(loader=self)
@@ -270,14 +274,15 @@ def load_command_table(self, _):
270274

271275
from .operations.dns import RecordSetAUpdate as DNSRecordSetAUpdate, RecordSetAAAAUpdate as DNSRecordSetAAAAUpdate, \
272276
RecordSetDSUpdate as DNSRecordSetDSUpdate, RecordSetMXUpdate as DNSRecordSetMXUpdate, \
273-
RecordSetNSUpdate as DNSRecordSetNSUpdate, RecordSetPTRUpdate as DNSRecordSetPTRUpdate, \
274-
RecordSetSRVUpdate as DNSRecordSetSRVUpdate, RecordSetTLSAUpdate as DNSRecordSetTLSAUpdate, \
275-
RecordSetTXTUpdate as DNSRecordSetTXTUpdate, RecordSetCAAUpdate as DNSRecordSetCAAUpdate, \
276-
RecordSetCNAMEUpdate as DNSRecordSetCNAMEUpdate
277+
RecordSetNAPTRUpdate as DNSRecordSetNAPTRUpdate, RecordSetNSUpdate as DNSRecordSetNSUpdate, \
278+
RecordSetPTRUpdate as DNSRecordSetPTRUpdate, RecordSetSRVUpdate as DNSRecordSetSRVUpdate, \
279+
RecordSetTLSAUpdate as DNSRecordSetTLSAUpdate, RecordSetTXTUpdate as DNSRecordSetTXTUpdate, \
280+
RecordSetCAAUpdate as DNSRecordSetCAAUpdate, RecordSetCNAMEUpdate as DNSRecordSetCNAMEUpdate
277281
self.command_table["network dns record-set a update"] = DNSRecordSetAUpdate(loader=self)
278282
self.command_table["network dns record-set aaaa update"] = DNSRecordSetAAAAUpdate(loader=self)
279283
self.command_table["network dns record-set ds update"] = DNSRecordSetDSUpdate(loader=self)
280284
self.command_table["network dns record-set mx update"] = DNSRecordSetMXUpdate(loader=self)
285+
self.command_table["network dns record-set naptr update"] = DNSRecordSetNAPTRUpdate(loader=self)
281286
self.command_table["network dns record-set ns update"] = DNSRecordSetNSUpdate(loader=self)
282287
self.command_table["network dns record-set ptr update"] = DNSRecordSetPTRUpdate(loader=self)
283288
self.command_table["network dns record-set srv update"] = DNSRecordSetSRVUpdate(loader=self)
@@ -288,14 +293,15 @@ def load_command_table(self, _):
288293

289294
from .operations.dns import RecordSetADelete as DNSRecordSetADelete, RecordSetAAAADelete as DNSRecordSetAAAADelete, \
290295
RecordSetDSDelete as DNSRecordSetDSDelete, RecordSetMXDelete as DNSRecordSetMXDelete, \
291-
RecordSetNSDelete as DNSRecordSetNSDelete, RecordSetPTRDelete as DNSRecordSetPTRDelete, \
292-
RecordSetSRVDelete as DNSRecordSetSRVDelete, RecordSetTLSADelete as DNSRecordSetTLSADelete, \
293-
RecordSetTXTDelete as DNSRecordSetTXTDelete, RecordSetCAADelete as DNSRecordSetCAADelete, \
294-
RecordSetCNAMEDelete as DNSRecordSetCNAMEDelete
296+
RecordSetNAPTRDelete as DNSRecordSetNAPTRDelete, RecordSetNSDelete as DNSRecordSetNSDelete, \
297+
RecordSetPTRDelete as DNSRecordSetPTRDelete, RecordSetSRVDelete as DNSRecordSetSRVDelete, \
298+
RecordSetTLSADelete as DNSRecordSetTLSADelete, RecordSetTXTDelete as DNSRecordSetTXTDelete, \
299+
RecordSetCAADelete as DNSRecordSetCAADelete, RecordSetCNAMEDelete as DNSRecordSetCNAMEDelete
295300
self.command_table["network dns record-set a delete"] = DNSRecordSetADelete(loader=self)
296301
self.command_table["network dns record-set aaaa delete"] = DNSRecordSetAAAADelete(loader=self)
297302
self.command_table["network dns record-set ds delete"] = DNSRecordSetDSDelete(loader=self)
298303
self.command_table["network dns record-set mx delete"] = DNSRecordSetMXDelete(loader=self)
304+
self.command_table["network dns record-set naptr delete"] = DNSRecordSetNAPTRDelete(loader=self)
299305
self.command_table["network dns record-set ns delete"] = DNSRecordSetNSDelete(loader=self)
300306
self.command_table["network dns record-set ptr delete"] = DNSRecordSetPTRDelete(loader=self)
301307
self.command_table["network dns record-set srv delete"] = DNSRecordSetSRVDelete(loader=self)

0 commit comments

Comments
 (0)