@@ -224,15 +224,16 @@ func createPrivateMockRecordSetMultiWithTTL(name, recordType string, ttl int64,
224
224
}
225
225
226
226
// newMockedAzurePrivateDNSProvider creates an AzureProvider comprising the mocked clients for zones and recordsets
227
- func newMockedAzurePrivateDNSProvider (domainFilter endpoint.DomainFilter , zoneIDFilter provider.ZoneIDFilter , dryRun bool , resourceGroup string , zones []* privatedns.PrivateZone , recordSets []* privatedns.RecordSet ) (* AzurePrivateDNSProvider , error ) {
227
+ func newMockedAzurePrivateDNSProvider (domainFilter endpoint.DomainFilter , zoneNameFilter endpoint. DomainFilter , zoneIDFilter provider.ZoneIDFilter , dryRun bool , resourceGroup string , zones []* privatedns.PrivateZone , recordSets []* privatedns.RecordSet ) (* AzurePrivateDNSProvider , error ) {
228
228
zonesClient := newMockPrivateZonesClient (zones )
229
229
recordSetsClient := newMockPrivateRecordSectsClient (recordSets )
230
- return newAzurePrivateDNSProvider (domainFilter , zoneIDFilter , dryRun , resourceGroup , & zonesClient , & recordSetsClient ), nil
230
+ return newAzurePrivateDNSProvider (domainFilter , zoneNameFilter , zoneIDFilter , dryRun , resourceGroup , & zonesClient , & recordSetsClient ), nil
231
231
}
232
232
233
- func newAzurePrivateDNSProvider (domainFilter endpoint.DomainFilter , zoneIDFilter provider.ZoneIDFilter , dryRun bool , resourceGroup string , privateZonesClient PrivateZonesClient , privateRecordsClient PrivateRecordSetsClient ) * AzurePrivateDNSProvider {
233
+ func newAzurePrivateDNSProvider (domainFilter endpoint.DomainFilter , zoneNameFilter endpoint. DomainFilter , zoneIDFilter provider.ZoneIDFilter , dryRun bool , resourceGroup string , privateZonesClient PrivateZonesClient , privateRecordsClient PrivateRecordSetsClient ) * AzurePrivateDNSProvider {
234
234
return & AzurePrivateDNSProvider {
235
235
domainFilter : domainFilter ,
236
+ zoneNameFilter : zoneNameFilter ,
236
237
zoneIDFilter : zoneIDFilter ,
237
238
dryRun : dryRun ,
238
239
resourceGroup : resourceGroup ,
@@ -242,7 +243,7 @@ func newAzurePrivateDNSProvider(domainFilter endpoint.DomainFilter, zoneIDFilter
242
243
}
243
244
244
245
func TestAzurePrivateDNSRecord (t * testing.T ) {
245
- provider , err := newMockedAzurePrivateDNSProvider (endpoint .NewDomainFilter ([]string {"example.com" }), provider .NewZoneIDFilter ([]string {"" }), true , "k8s" ,
246
+ provider , err := newMockedAzurePrivateDNSProvider (endpoint .NewDomainFilter ([]string {"example.com" }), endpoint . NewDomainFilter ([] string {}), provider .NewZoneIDFilter ([]string {"" }), true , "k8s" ,
246
247
[]* privatedns.PrivateZone {
247
248
createMockPrivateZone ("example.com" , "/privateDnsZones/example.com" ),
248
249
},
@@ -281,7 +282,7 @@ func TestAzurePrivateDNSRecord(t *testing.T) {
281
282
}
282
283
283
284
func TestAzurePrivateDNSMultiRecord (t * testing.T ) {
284
- provider , err := newMockedAzurePrivateDNSProvider (endpoint .NewDomainFilter ([]string {"example.com" }), provider .NewZoneIDFilter ([]string {"" }), true , "k8s" ,
285
+ provider , err := newMockedAzurePrivateDNSProvider (endpoint .NewDomainFilter ([]string {"example.com" }), endpoint . NewDomainFilter ([] string {}), provider .NewZoneIDFilter ([]string {"" }), true , "k8s" ,
285
286
[]* privatedns.PrivateZone {
286
287
createMockPrivateZone ("example.com" , "/privateDnsZones/example.com" ),
287
288
},
@@ -369,6 +370,7 @@ func testAzurePrivateDNSApplyChangesInternal(t *testing.T, dryRun bool, client P
369
370
zonesClient := newMockPrivateZonesClient (zones )
370
371
371
372
provider := newAzurePrivateDNSProvider (
373
+ endpoint .NewDomainFilter ([]string {"" }),
372
374
endpoint .NewDomainFilter ([]string {"" }),
373
375
provider .NewZoneIDFilter ([]string {"" }),
374
376
dryRun ,
@@ -430,3 +432,123 @@ func testAzurePrivateDNSApplyChangesInternal(t *testing.T, dryRun bool, client P
430
432
t .Fatal (err )
431
433
}
432
434
}
435
+
436
+ func TestAzurePrivateDNSNameFilter (t * testing.T ) {
437
+ provider , err := newMockedAzurePrivateDNSProvider (endpoint .NewDomainFilter ([]string {"nginx.example.com" }), endpoint .NewDomainFilter ([]string {"example.com" }), provider .NewZoneIDFilter ([]string {"" }), true , "k8s" ,
438
+ []* privatedns.PrivateZone {
439
+ createMockPrivateZone ("example.com" , "/privateDnsZones/example.com" ),
440
+ },
441
+
442
+ []* privatedns.RecordSet {
443
+ createPrivateMockRecordSet ("@" , "NS" , "ns1-03.azure-dns.com." ),
444
+ createPrivateMockRecordSet ("@" , "SOA" , "Email: azuredns-hostmaster.microsoft.com" ),
445
+ createPrivateMockRecordSet ("@" , endpoint .RecordTypeA , "123.123.123.122" ),
446
+ createPrivateMockRecordSet ("@" , endpoint .RecordTypeTXT , "heritage=external-dns,external-dns/owner=default" ),
447
+ createPrivateMockRecordSetWithTTL ("test.nginx" , endpoint .RecordTypeA , "123.123.123.123" , 3600 ),
448
+ createPrivateMockRecordSetWithTTL ("nginx" , endpoint .RecordTypeA , "123.123.123.123" , 3600 ),
449
+ createPrivateMockRecordSetWithTTL ("nginx" , endpoint .RecordTypeTXT , "heritage=external-dns,external-dns/owner=default" , recordTTL ),
450
+ createPrivateMockRecordSetWithTTL ("mail.nginx" , endpoint .RecordTypeMX , "20 example.com" , recordTTL ),
451
+ createPrivateMockRecordSetWithTTL ("hack" , endpoint .RecordTypeCNAME , "hack.azurewebsites.net" , 10 ),
452
+ })
453
+ if err != nil {
454
+ t .Fatal (err )
455
+ }
456
+
457
+ ctx := context .Background ()
458
+ actual , err := provider .Records (ctx )
459
+ if err != nil {
460
+ t .Fatal (err )
461
+ }
462
+ expected := []* endpoint.Endpoint {
463
+ endpoint .NewEndpointWithTTL ("test.nginx.example.com" , endpoint .RecordTypeA , 3600 , "123.123.123.123" ),
464
+ endpoint .NewEndpointWithTTL ("nginx.example.com" , endpoint .RecordTypeA , 3600 , "123.123.123.123" ),
465
+ endpoint .NewEndpointWithTTL ("nginx.example.com" , endpoint .RecordTypeTXT , recordTTL , "heritage=external-dns,external-dns/owner=default" ),
466
+ endpoint .NewEndpointWithTTL ("mail.nginx.example.com" , endpoint .RecordTypeMX , recordTTL , "20 example.com" ),
467
+ }
468
+
469
+ validateAzureEndpoints (t , actual , expected )
470
+ }
471
+
472
+ func TestAzurePrivateDNSApplyChangesZoneName (t * testing.T ) {
473
+ recordsClient := mockRecordSetsClient {}
474
+
475
+ testAzureApplyChangesInternalZoneName (t , false , & recordsClient )
476
+
477
+ validateAzureEndpoints (t , recordsClient .deletedEndpoints , []* endpoint.Endpoint {
478
+ endpoint .NewEndpoint ("deleted.foo.example.com" , endpoint .RecordTypeA , "" ),
479
+ endpoint .NewEndpoint ("deletedaaaa.foo.example.com" , endpoint .RecordTypeAAAA , "" ),
480
+ endpoint .NewEndpoint ("deletedcname.foo.example.com" , endpoint .RecordTypeCNAME , "" ),
481
+ })
482
+
483
+ validateAzureEndpoints (t , recordsClient .updatedEndpoints , []* endpoint.Endpoint {
484
+ endpoint .NewEndpointWithTTL ("foo.example.com" , endpoint .RecordTypeA , endpoint .TTL (recordTTL ), "1.2.3.4" , "1.2.3.5" ),
485
+ endpoint .NewEndpointWithTTL ("foo.example.com" , endpoint .RecordTypeAAAA , endpoint .TTL (recordTTL ), "2001::1:2:3:4" , "2001::1:2:3:5" ),
486
+ endpoint .NewEndpointWithTTL ("foo.example.com" , endpoint .RecordTypeTXT , endpoint .TTL (recordTTL ), "tag" ),
487
+ endpoint .NewEndpointWithTTL ("new.foo.example.com" , endpoint .RecordTypeA , 3600 , "111.222.111.222" ),
488
+ endpoint .NewEndpointWithTTL ("new.foo.example.com" , endpoint .RecordTypeAAAA , 3600 , "2001::111:222:111:222" ),
489
+ endpoint .NewEndpointWithTTL ("newcname.foo.example.com" , endpoint .RecordTypeCNAME , 10 , "other.com" ),
490
+ })
491
+ }
492
+
493
+ func testAzurePrivateDNSApplyChangesInternalZoneName (t * testing.T , dryRun bool , client PrivateRecordSetsClient ) {
494
+ zones := []* privatedns.PrivateZone {
495
+ createMockPrivateZone ("example.com" , "/privateDnsZones/example.com" ),
496
+ }
497
+ zonesClient := newMockPrivateZonesClient (zones )
498
+
499
+ provider := newAzurePrivateDNSProvider (
500
+ endpoint .NewDomainFilter ([]string {"foo.example.com" }),
501
+ endpoint .NewDomainFilter ([]string {"example.com" }),
502
+ provider .NewZoneIDFilter ([]string {"" }),
503
+ dryRun ,
504
+ "group" ,
505
+ & zonesClient ,
506
+ client ,
507
+ )
508
+
509
+ createRecords := []* endpoint.Endpoint {
510
+ endpoint .NewEndpoint ("example.com" , endpoint .RecordTypeA , "1.2.3.4" ),
511
+ endpoint .NewEndpoint ("example.com" , endpoint .RecordTypeAAAA , "2001::1:2:3:4" ),
512
+ endpoint .NewEndpoint ("example.com" , endpoint .RecordTypeTXT , "tag" ),
513
+ endpoint .NewEndpoint ("foo.example.com" , endpoint .RecordTypeA , "1.2.3.5" , "1.2.3.4" ),
514
+ endpoint .NewEndpoint ("foo.example.com" , endpoint .RecordTypeAAAA , "2001::1:2:3:5" , "2001::1:2:3:4" ),
515
+ endpoint .NewEndpoint ("foo.example.com" , endpoint .RecordTypeTXT , "tag" ),
516
+ endpoint .NewEndpoint ("bar.example.com" , endpoint .RecordTypeCNAME , "other.com" ),
517
+ endpoint .NewEndpoint ("bar.example.com" , endpoint .RecordTypeTXT , "tag" ),
518
+ endpoint .NewEndpoint ("other.com" , endpoint .RecordTypeA , "5.6.7.8" ),
519
+ endpoint .NewEndpoint ("other.com" , endpoint .RecordTypeTXT , "tag" ),
520
+ endpoint .NewEndpoint ("nope.com" , endpoint .RecordTypeA , "4.4.4.4" ),
521
+ endpoint .NewEndpoint ("nope.com" , endpoint .RecordTypeTXT , "tag" ),
522
+ }
523
+
524
+ currentRecords := []* endpoint.Endpoint {
525
+ endpoint .NewEndpoint ("old.foo.example.com" , endpoint .RecordTypeA , "121.212.121.212" ),
526
+ endpoint .NewEndpoint ("oldcname.foo.example.com" , endpoint .RecordTypeCNAME , "other.com" ),
527
+ endpoint .NewEndpoint ("old.nope.example.com" , endpoint .RecordTypeA , "121.212.121.212" ),
528
+ }
529
+ updatedRecords := []* endpoint.Endpoint {
530
+ endpoint .NewEndpointWithTTL ("new.foo.example.com" , endpoint .RecordTypeA , 3600 , "111.222.111.222" ),
531
+ endpoint .NewEndpointWithTTL ("new.foo.example.com" , endpoint .RecordTypeAAAA , 3600 , "2001::111:222:111:222" ),
532
+ endpoint .NewEndpointWithTTL ("newcname.foo.example.com" , endpoint .RecordTypeCNAME , 10 , "other.com" ),
533
+ endpoint .NewEndpoint ("new.nope.example.com" , endpoint .RecordTypeA , "222.111.222.111" ),
534
+ endpoint .NewEndpoint ("new.nope.example.com" , endpoint .RecordTypeAAAA , "2001::222:111:222:111" ),
535
+ }
536
+
537
+ deleteRecords := []* endpoint.Endpoint {
538
+ endpoint .NewEndpoint ("deleted.foo.example.com" , endpoint .RecordTypeA , "111.222.111.222" ),
539
+ endpoint .NewEndpoint ("deletedaaaa.foo.example.com" , endpoint .RecordTypeAAAA , "2001::111:222:111:222" ),
540
+ endpoint .NewEndpoint ("deletedcname.foo.example.com" , endpoint .RecordTypeCNAME , "other.com" ),
541
+ endpoint .NewEndpoint ("deleted.nope.example.com" , endpoint .RecordTypeA , "222.111.222.111" ),
542
+ }
543
+
544
+ changes := & plan.Changes {
545
+ Create : createRecords ,
546
+ UpdateNew : updatedRecords ,
547
+ UpdateOld : currentRecords ,
548
+ Delete : deleteRecords ,
549
+ }
550
+
551
+ if err := provider .ApplyChanges (context .Background (), changes ); err != nil {
552
+ t .Fatal (err )
553
+ }
554
+ }
0 commit comments