From 0c0efe1847016e78ebcd204a3889b51c34c1ecfe Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Mon, 4 Aug 2025 13:27:54 +0800 Subject: [PATCH 1/9] test case pom --- .../azure-resourcemanager-cdn/pom.xml | 19 +++++ .../cdn/CdnProfileOperationsTests.java | 74 +++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/pom.xml b/sdk/resourcemanager/azure-resourcemanager-cdn/pom.xml index 656b10fa5589..5137d63653b4 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/pom.xml +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/pom.xml @@ -44,6 +44,13 @@ --add-opens com.azure.resourcemanager.cdn/com.azure.resourcemanager.cdn=ALL-UNNAMED --add-opens com.azure.core/com.azure.core.implementation.util=ALL-UNNAMED + + --add-exports com.azure.resourcemanager.resources/com.azure.resourcemanager.resources.fluentcore.arm.implementation=ALL-UNNAMED + --add-exports com.azure.resourcemanager.resources/com.azure.resourcemanager.resources.fluentcore.arm.collection.implementation=ALL-UNNAMED + --add-exports com.azure.resourcemanager.resources/com.azure.resourcemanager.resources.fluentcore.arm.models.implementation=ALL-UNNAMED + --add-exports com.azure.resourcemanager.resources/com.azure.resourcemanager.resources.fluentcore.model.implementation=ALL-UNNAMED + --add-opens com.azure.resourcemanager.resources/com.azure.resourcemanager.resources=ALL-UNNAMED + --add-opens com.azure.resourcemanager.resources/com.azure.resourcemanager.resources.fluentcore.arm=ALL-UNNAMED @@ -60,6 +67,18 @@ azure-resourcemanager-resources 2.54.0-beta.1 + + com.azure.resourcemanager + azure-resourcemanager-appservice + 2.54.0-beta.1 + test + + + com.azure.resourcemanager + azure-resourcemanager-dns + 2.54.0-beta.1 + test + org.junit.jupiter junit-jupiter-engine diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java b/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java index f133b0fe0cc6..933bfe4da547 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java @@ -7,6 +7,7 @@ import com.azure.core.http.rest.PagedIterable; import com.azure.core.management.Region; import com.azure.core.management.profile.AzureProfile; +import com.azure.resourcemanager.appservice.models.AppServiceDomain; import com.azure.resourcemanager.cdn.models.CacheBehavior; import com.azure.resourcemanager.cdn.models.CacheExpirationActionParameters; import com.azure.resourcemanager.cdn.models.CacheType; @@ -25,6 +26,9 @@ import com.azure.resourcemanager.cdn.models.RequestSchemeMatchConditionParametersMatchValuesItem; import com.azure.resourcemanager.cdn.models.UrlRedirectAction; import com.azure.resourcemanager.cdn.models.UrlRedirectActionParameters; +import com.azure.resourcemanager.dns.models.DnsZone; +import com.azure.resourcemanager.resources.fluentcore.arm.CountryIsoCode; +import com.azure.resourcemanager.resources.fluentcore.arm.CountryPhoneCode; import com.azure.resourcemanager.resources.models.ResourceGroup; import com.azure.resourcemanager.test.utils.TestUtilities; import org.junit.jupiter.api.Assertions; @@ -300,4 +304,74 @@ public void canCrudStandardRulesEngineRules() { Assertions.assertEquals(2, cdnProfile.endpoints().get(cdnEndpointName).standardRulesEngineRules().size()); } + + @Test + public void canCreateWithCustomDomain() { + String cdnProfileName = generateRandomResourceName("cdnp", 15); + String cdnEndpointName = generateRandomResourceName("cdnendp", 15); + String domainName = generateRandomResourceName("jsdkcdn", 15) + ".com"; + String cname1 = "c1"; + String cname2 = "c2"; + String customDomain1 = cname1 + "." + domainName; + String customDomain2 = cname2 + "." + domainName; + + // purchase domain + AppServiceDomain domain = appServiceManager.domains() + .define(domainName) + .withExistingResourceGroup(resourceManager.resourceGroups().define(rgName).withRegion(region).create()) + .defineRegistrantContact() + .withFirstName("Jon") + .withLastName("Doe") + .withEmail("jondoe@contoso.com") + .withAddressLine1("123 4th Ave") + .withCity("Redmond") + .withStateOrProvince("WA") + .withCountry(CountryIsoCode.UNITED_STATES) + .withPostalCode("98052") + .withPhoneCountryCode(CountryPhoneCode.UNITED_STATES) + .withPhoneNumber("4258828080") + .attach() + .withDomainPrivacyEnabled(true) + .withAutoRenewEnabled(false) + .create(); + // create cname record for the custom domains and cdn endpoint + DnsZone dnsZone = dnsZoneManager.zones() + .define(domainName) + .withExistingResourceGroup(rgName) + .withCNameRecordSet(cname1, cdnEndpointName + ".azureedge.net") + .withCNameRecordSet(cname2, cdnEndpointName + ".azureedge.net") + .create(); + + CdnProfile cdnProfile = cdnManager.profiles() + .define(cdnProfileName) + .withRegion(region) + .withNewResourceGroup(rgName) + .withStandardMicrosoftSku() + .defineNewEndpoint(cdnEndpointName) + .withOrigin("origin1", "www.someDomain.net") + .withHttpAllowed(false) + .withHttpsAllowed(true) + .withCustomDomain(customDomain1) + .withCustomDomain(customDomain2) + .attach() + .create(); + + Assertions.assertNotNull(cdnProfile); + Assertions.assertEquals(cdnProfileName, cdnProfile.name()); + + Map cdnEndpointMap = cdnProfile.endpoints(); + Assertions.assertEquals(1, cdnProfile.endpoints().size()); + + CdnEndpoint cdnEndpoint = cdnEndpointMap.get(cdnEndpointName); + Assertions.assertEquals(2, cdnEndpoint.customDomains().size()); + + // delete the cname of custom domain1 + dnsZone.cNameRecordSets().deleteByName(cname1); + + // remove custom domain + cdnProfile.update().updateEndpoint(cdnEndpointName).withoutCustomDomain(customDomain1).parent().apply(); + + cdnEndpoint.refresh(); + Assertions.assertEquals(1, cdnEndpoint.customDomains().size()); + } } From c0653f1393b21e0a03eb3b005af0c7f3654cc166 Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Mon, 4 Aug 2025 13:27:41 +0800 Subject: [PATCH 2/9] fix customDomain --- .../cdn/implementation/CdnEndpointImpl.java | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/src/main/java/com/azure/resourcemanager/cdn/implementation/CdnEndpointImpl.java b/sdk/resourcemanager/azure-resourcemanager-cdn/src/main/java/com/azure/resourcemanager/cdn/implementation/CdnEndpointImpl.java index a71e923b5357..18db0f461183 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/src/main/java/com/azure/resourcemanager/cdn/implementation/CdnEndpointImpl.java +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/src/main/java/com/azure/resourcemanager/cdn/implementation/CdnEndpointImpl.java @@ -33,6 +33,7 @@ import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -57,15 +58,15 @@ class CdnEndpointImpl extends ExternalChildResourceImpl customDomainList; - private List deletedCustomDomainList; + private Set customDomainHostnames; + private Set deletedCustomDomainHostnames; // rule map for rules engine in Standard Microsoft SKU, indexed by rule name private final Map standardRulesEngineRuleMap = new HashMap<>(); CdnEndpointImpl(String name, CdnProfileImpl parent, EndpointInner inner) { super(name, parent, inner); - this.customDomainList = new ArrayList<>(); - this.deletedCustomDomainList = new ArrayList<>(); + this.customDomainHostnames = new LinkedHashSet<>(); + this.deletedCustomDomainHostnames = new HashSet<>(); initializeRuleMapForStandardMicrosoftSku(); } @@ -94,8 +95,8 @@ public Mono createResourceAsync() { .createAsync(this.parent().resourceGroupName(), this.parent().name(), this.name(), this.innerModel()) .flatMap(inner -> { self.setInner(inner); - return Flux.fromIterable(self.customDomainList) - .flatMapDelayError(customDomainInner -> self.parent() + return Flux.fromIterable(self.customDomainHostnames) + .flatMapDelayError(customDomain -> self.parent() .manager() .serviceClient() .getCustomDomains() @@ -105,7 +106,7 @@ public Mono createResourceAsync() { .resourceManager() .internalContext() .randomResourceName("CustomDomain", 50), - new CustomDomainParameters().withHostname(customDomainInner.hostname())), + new CustomDomainParameters().withHostname(customDomain)), 32, 32) .then(self.parent() .manager() @@ -114,7 +115,9 @@ public Mono createResourceAsync() { .listByEndpointAsync(self.parent().resourceGroupName(), self.parent().name(), self.name()) .collectList() .map(customDomainInners -> { - self.customDomainList.addAll(customDomainInners); + self.customDomainHostnames.addAll(customDomainInners.stream() + .map(CustomDomainInner::hostname) + .collect(Collectors.toSet())); return self; })); }); @@ -166,17 +169,22 @@ public Mono updateResourceAsync() { .updateAsync(this.parent().resourceGroupName(), this.parent().name(), this.name(), endpointUpdateParameters); - Flux customDomainCreateTask = Flux.fromIterable(this.customDomainList) + Flux customDomainCreateTask = Flux.fromIterable(this.customDomainHostnames) .flatMapDelayError(itemToCreate -> this.parent() .manager() .serviceClient() .getCustomDomains() .createAsync(this.parent().resourceGroupName(), this.parent().name(), this.name(), self.parent().manager().resourceManager().internalContext().randomResourceName("CustomDomain", 50), - new CustomDomainParameters().withHostname(itemToCreate.hostname())), + new CustomDomainParameters().withHostname(itemToCreate)), 32, 32); - Flux customDomainDeleteTask = Flux.fromIterable(this.deletedCustomDomainList) + Flux customDomainDeleteTask = this.parent() + .manager() + .serviceClient() + .getCustomDomains() + .listByEndpointAsync(this.parent().resourceGroupName(), this.parent().name(), this.name()) + .filter(customDomain -> this.deletedCustomDomainHostnames.contains(customDomain.hostname())) .flatMapDelayError(itemToDelete -> this.parent() .manager() .serviceClient() @@ -189,8 +197,8 @@ public Mono updateResourceAsync() { return Flux.mergeDelayError(32, customDomainTask, originUpdateTask, endpointUpdateTask).last().map(inner -> { self.setInner(inner); - self.customDomainList.clear(); - self.deletedCustomDomainList.clear(); + self.customDomainHostnames.clear(); + self.deletedCustomDomainHostnames.clear(); return self; }); } @@ -208,8 +216,8 @@ public Mono deleteResourceAsync() { public Mono refreshAsync() { final CdnEndpointImpl self = this; return super.refreshAsync().flatMap(cdnEndpoint -> { - self.customDomainList.clear(); - self.deletedCustomDomainList.clear(); + self.customDomainHostnames.clear(); + self.deletedCustomDomainHostnames.clear(); initializeRuleMapForStandardMicrosoftSku(); return self.parent() .manager() @@ -218,7 +226,8 @@ public Mono refreshAsync() { .listByEndpointAsync(self.parent().resourceGroupName(), self.parent().name(), self.name()) .collectList() .map(customDomainInners -> { - self.customDomainList.addAll(customDomainInners); + self.customDomainHostnames.addAll( + customDomainInners.stream().map(CustomDomainInner::hostname).collect(Collectors.toSet())); return self; }); }); @@ -580,7 +589,7 @@ public CdnEndpointImpl withoutGeoFilter(String relativePath) { @Override public CdnEndpointImpl withCustomDomain(String hostName) { - this.customDomainList.add(new CustomDomainInner().withHostname(hostName)); + this.customDomainHostnames.add(hostName); return this; } @@ -607,7 +616,7 @@ public CdnEndpointImpl withoutStandardRulesEngineRule(String name) { @Override public CdnEndpointImpl withoutCustomDomain(String hostName) { - deletedCustomDomainList.add(new CustomDomainInner().withHostname(hostName)); + deletedCustomDomainHostnames.add(hostName); return this; } From 3c844c36cf89edf119189996200ff26e0e389e56 Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Mon, 4 Aug 2025 13:28:25 +0800 Subject: [PATCH 3/9] support deleteByName in DnsRecords --- .../dns/implementation/DnsRecordSetsBaseImpl.java | 14 ++++++++++++++ .../resourcemanager/dns/models/DnsRecordSets.java | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/implementation/DnsRecordSetsBaseImpl.java b/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/implementation/DnsRecordSetsBaseImpl.java index f078cda2a50e..8effcea13b0d 100644 --- a/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/implementation/DnsRecordSetsBaseImpl.java +++ b/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/implementation/DnsRecordSetsBaseImpl.java @@ -8,6 +8,7 @@ import com.azure.resourcemanager.dns.models.RecordType; import com.azure.resourcemanager.dns.fluent.models.RecordSetInner; import com.azure.resourcemanager.resources.fluentcore.arm.collection.implementation.ReadableWrappersImpl; +import reactor.core.publisher.Mono; /** The base implementation for Dns Record sets. */ abstract class DnsRecordSetsBaseImpl @@ -68,6 +69,19 @@ public PagedFlux listAsync(String recordSetNameSuffix, int pageSize) return listInternAsync(recordSetNameSuffix, pageSize); } + @Override + public void deleteByName(String name) { + this.deleteByNameAsync(name).block(); + } + + @Override + public Mono deleteByNameAsync(String name) { + return parent().manager() + .serviceClient() + .getRecordSets() + .deleteAsync(parent().resourceGroupName(), parent().name(), name, recordType); + } + @Override public DnsZoneImpl parent() { return this.dnsZone; diff --git a/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/models/DnsRecordSets.java b/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/models/DnsRecordSets.java index 53ad8a9e5840..7ef72541b267 100644 --- a/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/models/DnsRecordSets.java +++ b/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/models/DnsRecordSets.java @@ -8,6 +8,7 @@ import com.azure.core.http.rest.PagedIterable; import com.azure.resourcemanager.resources.fluentcore.arm.collection.SupportsGettingByName; import com.azure.resourcemanager.resources.fluentcore.arm.models.HasParent; +import com.azure.resourcemanager.resources.fluentcore.collection.SupportsDeletingByName; import com.azure.resourcemanager.resources.fluentcore.collection.SupportsListing; /** @@ -17,7 +18,7 @@ */ @Fluent public interface DnsRecordSets - extends SupportsListing, SupportsGettingByName, HasParent { + extends SupportsListing, SupportsGettingByName, SupportsDeletingByName, HasParent { /** * Lists all the record sets with the given suffix. * From 8d70af0277f23f55a8e641ecbac694cc2888ccd3 Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Mon, 4 Aug 2025 13:28:48 +0800 Subject: [PATCH 4/9] fix record test --- .../azure/resourcemanager/cdn/CdnManagementTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnManagementTest.java b/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnManagementTest.java index ca77c6c29124..269dbb443806 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnManagementTest.java +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnManagementTest.java @@ -10,11 +10,14 @@ import com.azure.core.http.policy.HttpPipelinePolicy; import com.azure.core.http.policy.RetryPolicy; import com.azure.core.management.profile.AzureProfile; +import com.azure.resourcemanager.appservice.AppServiceManager; +import com.azure.resourcemanager.dns.DnsZoneManager; import com.azure.resourcemanager.resources.ResourceManager; import com.azure.resourcemanager.resources.fluentcore.utils.HttpPipelineProvider; import com.azure.resourcemanager.resources.fluentcore.utils.ResourceManagerUtils; import com.azure.resourcemanager.test.ResourceManagerTestProxyTestBase; import com.azure.resourcemanager.test.utils.TestDelayProvider; +import com.azure.resourcemanager.test.utils.TestIdentifierProvider; import java.time.temporal.ChronoUnit; import java.util.List; @@ -23,6 +26,8 @@ public abstract class CdnManagementTest extends ResourceManagerTestProxyTestBase protected ResourceManager resourceManager; protected CdnManager cdnManager; + protected AppServiceManager appServiceManager; + protected DnsZoneManager dnsZoneManager; @Override protected HttpPipeline buildHttpPipeline(TokenCredential credential, AzureProfile profile, @@ -34,7 +39,12 @@ protected HttpPipeline buildHttpPipeline(TokenCredential credential, AzureProfil @Override protected void initializeClients(HttpPipeline httpPipeline, AzureProfile profile) { ResourceManagerUtils.InternalRuntimeContext.setDelayProvider(new TestDelayProvider(!isPlaybackMode())); + ResourceManagerUtils.InternalRuntimeContext internalContext = new ResourceManagerUtils.InternalRuntimeContext(); + internalContext.setIdentifierFunction(name -> new TestIdentifierProvider(testResourceNamer)); cdnManager = buildManager(CdnManager.class, httpPipeline, profile); resourceManager = cdnManager.resourceManager(); + appServiceManager = buildManager(AppServiceManager.class, httpPipeline, profile); + dnsZoneManager = buildManager(DnsZoneManager.class, httpPipeline, profile); + setInternalContext(internalContext, cdnManager, resourceManager, appServiceManager, dnsZoneManager); } } From dd701ed8f99b6dfe1b0c116bc401551e4710afd2 Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Mon, 4 Aug 2025 13:29:10 +0800 Subject: [PATCH 5/9] recording, changelog --- sdk/resourcemanager/azure-resourcemanager-cdn/assets.json | 2 +- sdk/resourcemanager/azure-resourcemanager-dns/CHANGELOG.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/assets.json b/sdk/resourcemanager/azure-resourcemanager-cdn/assets.json index 00069a5ea0e2..d51aa41926ac 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/assets.json +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/resourcemanager/azure-resourcemanager-cdn", - "Tag": "java/resourcemanager/azure-resourcemanager-cdn_684f7f8637" + "Tag": "java/resourcemanager/azure-resourcemanager-cdn_0342d6c65c" } diff --git a/sdk/resourcemanager/azure-resourcemanager-dns/CHANGELOG.md b/sdk/resourcemanager/azure-resourcemanager-dns/CHANGELOG.md index df5b6fed3b29..8a2436ecf145 100644 --- a/sdk/resourcemanager/azure-resourcemanager-dns/CHANGELOG.md +++ b/sdk/resourcemanager/azure-resourcemanager-dns/CHANGELOG.md @@ -4,6 +4,8 @@ ### Features Added +- Supported `deleteByName` in `DnsRecordSets`. + ### Breaking Changes ### Bugs Fixed From 67ce06add691299ed50f2768bd5bc4bd82a2fd87 Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Mon, 4 Aug 2025 13:41:38 +0800 Subject: [PATCH 6/9] revert Dns new feature --- .../azure-resourcemanager-cdn/pom.xml | 4 ++-- .../cdn/CdnProfileOperationsTests.java | 4 +++- .../azure-resourcemanager-dns/CHANGELOG.md | 2 -- .../dns/implementation/DnsRecordSetsBaseImpl.java | 14 -------------- .../resourcemanager/dns/models/DnsRecordSets.java | 3 +-- 5 files changed, 6 insertions(+), 21 deletions(-) diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/pom.xml b/sdk/resourcemanager/azure-resourcemanager-cdn/pom.xml index 5137d63653b4..12a501c60bc6 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/pom.xml +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/pom.xml @@ -70,13 +70,13 @@ com.azure.resourcemanager azure-resourcemanager-appservice - 2.54.0-beta.1 + 2.54.0-beta.1 test com.azure.resourcemanager azure-resourcemanager-dns - 2.54.0-beta.1 + 2.54.0-beta.1 test diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java b/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java index 933bfe4da547..2777ed4e5fd5 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java @@ -27,6 +27,7 @@ import com.azure.resourcemanager.cdn.models.UrlRedirectAction; import com.azure.resourcemanager.cdn.models.UrlRedirectActionParameters; import com.azure.resourcemanager.dns.models.DnsZone; +import com.azure.resourcemanager.dns.models.RecordType; import com.azure.resourcemanager.resources.fluentcore.arm.CountryIsoCode; import com.azure.resourcemanager.resources.fluentcore.arm.CountryPhoneCode; import com.azure.resourcemanager.resources.models.ResourceGroup; @@ -366,7 +367,8 @@ public void canCreateWithCustomDomain() { Assertions.assertEquals(2, cdnEndpoint.customDomains().size()); // delete the cname of custom domain1 - dnsZone.cNameRecordSets().deleteByName(cname1); + // TODO(xiaofei) Support deleteByName in DnsRecords + dnsZoneManager.serviceClient().getRecordSets().delete(rgName, domainName, cname1, RecordType.CNAME); // remove custom domain cdnProfile.update().updateEndpoint(cdnEndpointName).withoutCustomDomain(customDomain1).parent().apply(); diff --git a/sdk/resourcemanager/azure-resourcemanager-dns/CHANGELOG.md b/sdk/resourcemanager/azure-resourcemanager-dns/CHANGELOG.md index 8a2436ecf145..df5b6fed3b29 100644 --- a/sdk/resourcemanager/azure-resourcemanager-dns/CHANGELOG.md +++ b/sdk/resourcemanager/azure-resourcemanager-dns/CHANGELOG.md @@ -4,8 +4,6 @@ ### Features Added -- Supported `deleteByName` in `DnsRecordSets`. - ### Breaking Changes ### Bugs Fixed diff --git a/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/implementation/DnsRecordSetsBaseImpl.java b/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/implementation/DnsRecordSetsBaseImpl.java index 8effcea13b0d..f078cda2a50e 100644 --- a/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/implementation/DnsRecordSetsBaseImpl.java +++ b/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/implementation/DnsRecordSetsBaseImpl.java @@ -8,7 +8,6 @@ import com.azure.resourcemanager.dns.models.RecordType; import com.azure.resourcemanager.dns.fluent.models.RecordSetInner; import com.azure.resourcemanager.resources.fluentcore.arm.collection.implementation.ReadableWrappersImpl; -import reactor.core.publisher.Mono; /** The base implementation for Dns Record sets. */ abstract class DnsRecordSetsBaseImpl @@ -69,19 +68,6 @@ public PagedFlux listAsync(String recordSetNameSuffix, int pageSize) return listInternAsync(recordSetNameSuffix, pageSize); } - @Override - public void deleteByName(String name) { - this.deleteByNameAsync(name).block(); - } - - @Override - public Mono deleteByNameAsync(String name) { - return parent().manager() - .serviceClient() - .getRecordSets() - .deleteAsync(parent().resourceGroupName(), parent().name(), name, recordType); - } - @Override public DnsZoneImpl parent() { return this.dnsZone; diff --git a/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/models/DnsRecordSets.java b/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/models/DnsRecordSets.java index 7ef72541b267..53ad8a9e5840 100644 --- a/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/models/DnsRecordSets.java +++ b/sdk/resourcemanager/azure-resourcemanager-dns/src/main/java/com/azure/resourcemanager/dns/models/DnsRecordSets.java @@ -8,7 +8,6 @@ import com.azure.core.http.rest.PagedIterable; import com.azure.resourcemanager.resources.fluentcore.arm.collection.SupportsGettingByName; import com.azure.resourcemanager.resources.fluentcore.arm.models.HasParent; -import com.azure.resourcemanager.resources.fluentcore.collection.SupportsDeletingByName; import com.azure.resourcemanager.resources.fluentcore.collection.SupportsListing; /** @@ -18,7 +17,7 @@ */ @Fluent public interface DnsRecordSets - extends SupportsListing, SupportsGettingByName, SupportsDeletingByName, HasParent { + extends SupportsListing, SupportsGettingByName, HasParent { /** * Lists all the record sets with the given suffix. * From 7e694b71802062ca12113e56479b73372eff01f7 Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Mon, 4 Aug 2025 14:36:37 +0800 Subject: [PATCH 7/9] update samples recording --- sdk/resourcemanager/azure-resourcemanager-samples/assets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/assets.json b/sdk/resourcemanager/azure-resourcemanager-samples/assets.json index 322e9f0191c8..45768d27faec 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/assets.json +++ b/sdk/resourcemanager/azure-resourcemanager-samples/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/resourcemanager/azure-resourcemanager-samples", - "Tag": "java/resourcemanager/azure-resourcemanager-samples_a67e3d0d37" + "Tag": "java/resourcemanager/azure-resourcemanager-samples_cef9d88ee4" } From 6f80bb08cc5a358de916fc79141683d47834b10c Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Mon, 4 Aug 2025 16:03:42 +0800 Subject: [PATCH 8/9] do not call list when no to delete --- .../azure-resourcemanager-cdn/assets.json | 2 +- .../cdn/implementation/CdnEndpointImpl.java | 24 ++++++++++++------- .../cdn/CdnProfileOperationsTests.java | 7 +++--- .../azure-resourcemanager-samples/assets.json | 2 +- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/assets.json b/sdk/resourcemanager/azure-resourcemanager-cdn/assets.json index d51aa41926ac..0c12c1caeafa 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/assets.json +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/resourcemanager/azure-resourcemanager-cdn", - "Tag": "java/resourcemanager/azure-resourcemanager-cdn_0342d6c65c" + "Tag": "java/resourcemanager/azure-resourcemanager-cdn_6809e0b2b9" } diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/src/main/java/com/azure/resourcemanager/cdn/implementation/CdnEndpointImpl.java b/sdk/resourcemanager/azure-resourcemanager-cdn/src/main/java/com/azure/resourcemanager/cdn/implementation/CdnEndpointImpl.java index 18db0f461183..cbea4240b353 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/src/main/java/com/azure/resourcemanager/cdn/implementation/CdnEndpointImpl.java +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/src/main/java/com/azure/resourcemanager/cdn/implementation/CdnEndpointImpl.java @@ -179,18 +179,24 @@ public Mono updateResourceAsync() { new CustomDomainParameters().withHostname(itemToCreate)), 32, 32); - Flux customDomainDeleteTask = this.parent() - .manager() - .serviceClient() - .getCustomDomains() - .listByEndpointAsync(this.parent().resourceGroupName(), this.parent().name(), this.name()) - .filter(customDomain -> this.deletedCustomDomainHostnames.contains(customDomain.hostname())) - .flatMapDelayError(itemToDelete -> this.parent() + Flux customDomainDeleteTask; + if (this.deletedCustomDomainHostnames.isEmpty()) { + customDomainDeleteTask = Flux.empty(); + } else { + customDomainDeleteTask = this.parent() .manager() .serviceClient() .getCustomDomains() - .deleteAsync(this.parent().resourceGroupName(), this.parent().name(), this.name(), itemToDelete.name()), - 32, 32); + .listByEndpointAsync(this.parent().resourceGroupName(), this.parent().name(), this.name()) + .filter(customDomain -> this.deletedCustomDomainHostnames.contains(customDomain.hostname())) + .flatMapDelayError(itemToDelete -> this.parent() + .manager() + .serviceClient() + .getCustomDomains() + .deleteAsync(this.parent().resourceGroupName(), this.parent().name(), this.name(), + itemToDelete.name()), + 32, 32); + } Mono customDomainTask = Flux.concat(customDomainCreateTask, customDomainDeleteTask).then(Mono.empty()); diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java b/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java index 2777ed4e5fd5..e84557d88ee7 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/src/test/java/com/azure/resourcemanager/cdn/CdnProfileOperationsTests.java @@ -27,7 +27,6 @@ import com.azure.resourcemanager.cdn.models.UrlRedirectAction; import com.azure.resourcemanager.cdn.models.UrlRedirectActionParameters; import com.azure.resourcemanager.dns.models.DnsZone; -import com.azure.resourcemanager.dns.models.RecordType; import com.azure.resourcemanager.resources.fluentcore.arm.CountryIsoCode; import com.azure.resourcemanager.resources.fluentcore.arm.CountryPhoneCode; import com.azure.resourcemanager.resources.models.ResourceGroup; @@ -367,8 +366,10 @@ public void canCreateWithCustomDomain() { Assertions.assertEquals(2, cdnEndpoint.customDomains().size()); // delete the cname of custom domain1 - // TODO(xiaofei) Support deleteByName in DnsRecords - dnsZoneManager.serviceClient().getRecordSets().delete(rgName, domainName, cname1, RecordType.CNAME); + // Starting from April 9th 2021, Azure CDN requires removal of the CNAME records to Azure CDN endpoints before the resources can be deleted. + // Resources include Azure CDN custom domains, Azure CDN profiles/endpoints or Azure resource groups that has Azure CDN custom domain(s) enabled. + // https://learn.microsoft.com/answers/questions/1189452/trying-to-delete-cdn-endpoint-custom-domain + dnsZone.update().withoutCNameRecordSet(cname1).apply(); // remove custom domain cdnProfile.update().updateEndpoint(cdnEndpointName).withoutCustomDomain(customDomain1).parent().apply(); diff --git a/sdk/resourcemanager/azure-resourcemanager-samples/assets.json b/sdk/resourcemanager/azure-resourcemanager-samples/assets.json index 45768d27faec..6bfa8553b448 100644 --- a/sdk/resourcemanager/azure-resourcemanager-samples/assets.json +++ b/sdk/resourcemanager/azure-resourcemanager-samples/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/resourcemanager/azure-resourcemanager-samples", - "Tag": "java/resourcemanager/azure-resourcemanager-samples_cef9d88ee4" + "Tag": "java/resourcemanager/azure-resourcemanager-samples_2180f5586f" } From 3a8ff530d33d024bf3dd8acdb58fcf0ce399a84f Mon Sep 17 00:00:00 2001 From: xiaofeicao Date: Mon, 4 Aug 2025 16:13:54 +0800 Subject: [PATCH 9/9] changelog --- sdk/resourcemanager/azure-resourcemanager-cdn/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/resourcemanager/azure-resourcemanager-cdn/CHANGELOG.md b/sdk/resourcemanager/azure-resourcemanager-cdn/CHANGELOG.md index 60895e028aad..fb7e7acb0ed9 100644 --- a/sdk/resourcemanager/azure-resourcemanager-cdn/CHANGELOG.md +++ b/sdk/resourcemanager/azure-resourcemanager-cdn/CHANGELOG.md @@ -8,6 +8,8 @@ ### Bugs Fixed +- Fixed a bug in `CdnEndpoint.withoutCustomDomain(hostname)` implementation. Now it should work as expected. + ### Other Changes ## 2.53.0 (2025-07-25)