Skip to content

Commit 200daf8

Browse files
mgmt, bug fix on that list in network does not return full items (#47226)
1 parent 5b1d001 commit 200daf8

File tree

22 files changed

+247
-27
lines changed

22 files changed

+247
-27
lines changed

eng/lintingconfigs/revapi/track2/revapi.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,11 @@
748748
"code": ".*",
749749
"old": ".*com.azure.resourcemanager.keyvault.models.Reason.*",
750750
"justification": "\"Reason\" enum has changed from sealed to expandable."
751+
},
752+
{
753+
"code" : "java.field.addedStaticField",
754+
"new" : "field com.azure.resourcemanager.network.models.PublicIPSkuType.STANDARD_V2",
755+
"justification" : "Not a break."
751756
}
752757
]
753758
}

eng/versioning/version_client.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ com.azure.resourcemanager:azure-resourcemanager-eventhubs;2.53.4;2.54.0-beta.1
285285
com.azure.resourcemanager:azure-resourcemanager-keyvault;2.54.0;2.55.0-beta.1
286286
com.azure.resourcemanager:azure-resourcemanager-monitor;2.53.4;2.54.0-beta.2
287287
com.azure.resourcemanager:azure-resourcemanager-msi;2.53.4;2.54.0-beta.1
288-
com.azure.resourcemanager:azure-resourcemanager-network;2.55.0;2.56.0-beta.1
288+
com.azure.resourcemanager:azure-resourcemanager-network;2.55.0;2.56.0
289289
com.azure.resourcemanager:azure-resourcemanager-perf;1.0.0-beta.1;1.0.0-beta.1
290290
com.azure.resourcemanager:azure-resourcemanager-privatedns;2.53.4;2.54.0-beta.1
291291
com.azure.resourcemanager:azure-resourcemanager-resources;2.53.4;2.54.0-beta.1
@@ -551,6 +551,7 @@ unreleased_com.azure.v2:azure-core;2.0.0-beta.1
551551
unreleased_com.azure.v2:azure-identity;2.0.0-beta.1
552552
unreleased_com.azure.v2:azure-data-appconfiguration;2.0.0-beta.1
553553
unreleased_io.clientcore:http-netty4;1.0.0-beta.1
554+
unreleased_com.azure.resourcemanager:azure-resourcemanager-network;2.56.0
554555

555556
# Released Beta dependencies: Copy the entry from above, prepend "beta_", remove the current
556557
# version and set the version to the released beta. Released beta dependencies are only valid

sdk/network/azure-resourcemanager-network/CHANGELOG.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
# Release History
22

3-
## 2.56.0-beta.1 (Unreleased)
3+
## 2.56.0 (2025-11-12)
44

55
### Features Added
66

7-
### Breaking Changes
7+
- Added `STANDARD_V2` to `PublicIPSkuType`.
88

99
### Bugs Fixed
1010

11-
### Other Changes
11+
- Fixed the bug that `list()` in `LocalNetworkGateways`, `VirtualNetworkGateways`, `VirtualNetworkGatewayConnections` only return resources from 1 resource group.
12+
- Improved `VirtualNetworkGateway` to create Public IP Address with Standard SKU (unless the gateway is Basic SKU).
13+
- Improved `PublicIpAddress` to set the public IP allocation method to Static (unless the Public IP Address is Basic SKU).
1214

1315
## 2.55.0 (2025-11-06)
1416

sdk/network/azure-resourcemanager-network/assets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"AssetsRepo": "Azure/azure-sdk-assets",
33
"AssetsRepoPrefixPath": "java",
44
"TagPrefix": "java/network/azure-resourcemanager-network",
5-
"Tag": "java/network/azure-resourcemanager-network_7d7f40f37b"
5+
"Tag": "java/network/azure-resourcemanager-network_9360a60339"
66
}

sdk/network/azure-resourcemanager-network/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
<groupId>com.azure.resourcemanager</groupId>
1616
<artifactId>azure-resourcemanager-network</artifactId>
17-
<version>2.56.0-beta.1</version> <!-- {x-version-update;com.azure.resourcemanager:azure-resourcemanager-network;current} -->
17+
<version>2.56.0</version> <!-- {x-version-update;com.azure.resourcemanager:azure-resourcemanager-network;current} -->
1818
<packaging>jar</packaging>
1919

2020
<name>Microsoft Azure SDK for Network Management</name>

sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/LocalNetworkGatewaysImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public PagedIterable<LocalNetworkGateway> list() {
3535

3636
@Override
3737
public PagedFlux<LocalNetworkGateway> listAsync() {
38-
return PagedConverter
38+
return PagedConverterForMergedPagedFlux
3939
.mapPage(PagedConverter.mergePagedFlux(this.manager().resourceManager().resourceGroups().listAsync(),
4040
rg -> inner().listByResourceGroupAsync(rg.name())), this::wrapModel);
4141
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.azure.resourcemanager.network.implementation;
5+
6+
import com.azure.core.http.rest.PagedFlux;
7+
import com.azure.core.http.rest.PagedResponse;
8+
import com.azure.core.http.rest.PagedResponseBase;
9+
import com.azure.core.util.paging.PageRetriever;
10+
import reactor.core.publisher.Flux;
11+
12+
import java.util.function.Function;
13+
import java.util.function.Supplier;
14+
import java.util.stream.Collectors;
15+
16+
/**
17+
* Utility class for conversion of PagedResponse.
18+
*/
19+
final class PagedConverterForMergedPagedFlux {
20+
21+
private PagedConverterForMergedPagedFlux() {
22+
}
23+
24+
/**
25+
* Applies map transform to elements of PagedFlux.
26+
* <p>
27+
* Use this mapPage (not the one in PagedConverter) when the PagedFlux is produced by PagedConverter.mergePagedFlux.
28+
*
29+
* @param pagedFlux the input of PagedFlux.
30+
* @param mapper the map transform of element T to element S.
31+
* @param <T> input type of PagedFlux.
32+
* @param <S> return type of PagedFlux.
33+
* @return the PagedFlux with elements in PagedResponse transformed.
34+
*/
35+
static <T, S> PagedFlux<S> mapPage(PagedFlux<T> pagedFlux, Function<T, S> mapper) {
36+
Supplier<PageRetriever<String, PagedResponse<S>>> provider = () -> (continuationToken, pageSize) -> {
37+
// take all the pages, do not use .take(1)
38+
Flux<PagedResponse<T>> flux
39+
= (continuationToken == null) ? pagedFlux.byPage() : pagedFlux.byPage(continuationToken);
40+
return flux.map(mapPagedResponse(mapper));
41+
};
42+
return PagedFlux.create(provider);
43+
}
44+
45+
private static <T, S> Function<PagedResponse<T>, PagedResponse<S>> mapPagedResponse(Function<T, S> mapper) {
46+
return pagedResponse -> new PagedResponseBase<Void, S>(pagedResponse.getRequest(),
47+
pagedResponse.getStatusCode(), pagedResponse.getHeaders(),
48+
pagedResponse.getValue().stream().map(mapper).collect(Collectors.toList()),
49+
pagedResponse.getContinuationToken(), null);
50+
}
51+
}

sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/PublicIpAddressImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,15 @@ public Accepted<PublicIpAddress> beginCreate() {
199199
dependencyTasksAsync.blockLast();
200200

201201
this.cleanupDnsSettings();
202+
this.ensureStaticForStandardSku();
202203
}, this::setInner, Context.NONE);
203204
}
204205

205206
// CreateUpdateTaskGroup.ResourceCreator implementation
206207
@Override
207208
public Mono<PublicIpAddress> createResourceAsync() {
208209
this.cleanupDnsSettings();
210+
this.ensureStaticForStandardSku();
209211

210212
return this.manager()
211213
.serviceClient()
@@ -226,6 +228,14 @@ private void cleanupDnsSettings() {
226228
}
227229
}
228230

231+
private void ensureStaticForStandardSku() {
232+
if (this.sku() != null
233+
&& this.sku() != PublicIPSkuType.BASIC
234+
&& this.innerModel().publicIpAllocationMethod() == null) {
235+
this.withStaticIP();
236+
}
237+
}
238+
229239
private boolean equalsResourceType(String resourceType) {
230240
IpConfigurationInner ipConfig = this.innerModel().ipConfiguration();
231241
if (ipConfig == null || resourceType == null) {

sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayConnectionsImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public VirtualNetworkGateway parent() {
8080

8181
@Override
8282
public PagedFlux<VirtualNetworkGatewayConnection> listAsync() {
83-
return PagedConverter
83+
return PagedConverterForMergedPagedFlux
8484
.mapPage(PagedConverter.mergePagedFlux(this.manager().resourceManager().resourceGroups().listAsync(),
8585
rg -> inner().listByResourceGroupAsync(rg.name())), this::wrapModel);
8686
}

sdk/network/azure-resourcemanager-network/src/main/java/com/azure/resourcemanager/network/implementation/VirtualNetworkGatewayImpl.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.azure.resourcemanager.network.NetworkManager;
99
import com.azure.resourcemanager.network.models.BgpSettings;
1010
import com.azure.resourcemanager.network.models.Network;
11+
import com.azure.resourcemanager.network.models.PublicIPSkuType;
1112
import com.azure.resourcemanager.network.models.PublicIpAddress;
1213
import com.azure.resourcemanager.network.models.TagsObject;
1314
import com.azure.resourcemanager.network.models.VirtualNetworkGateway;
@@ -140,11 +141,22 @@ public VirtualNetworkGatewayImpl withNewPublicIpAddress(Creatable<PublicIpAddres
140141
@Override
141142
public VirtualNetworkGatewayImpl withNewPublicIpAddress() {
142143
final String pipName = this.manager().resourceManager().internalContext().randomResourceName("pip", 9);
143-
this.creatablePip = this.manager()
144+
PublicIpAddress.DefinitionStages.WithCreate ipAddressToCreate = this.manager()
144145
.publicIpAddresses()
145146
.define(pipName)
146147
.withRegion(this.regionName())
147148
.withExistingResourceGroup(this.resourceGroupName());
149+
150+
// ref https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-vpn-faq#can-i-request-a-static-public-ip-address-for-my-vpn-gateway
151+
if (this.sku() == null || this.sku().name() == VirtualNetworkGatewaySkuName.BASIC) {
152+
/*
153+
* Condition of "this.sku() == null" keeps the previous behavior.
154+
* When SKU is not set (i.e. user explicitly calls "withNewPublicIpAddress()"), it still creates a Public IP Address with Basic SKU.
155+
*/
156+
this.creatablePip = ipAddressToCreate.withSku(PublicIPSkuType.BASIC);
157+
} else {
158+
this.creatablePip = ipAddressToCreate.withSku(PublicIPSkuType.STANDARD);
159+
}
148160
return this;
149161
}
150162

@@ -358,12 +370,7 @@ private VirtualNetworkGatewayIpConfigurationImpl ensureDefaultIPConfig() {
358370

359371
private Creatable<PublicIpAddress> ensureDefaultPipDefinition() {
360372
if (this.creatablePip == null) {
361-
final String pipName = this.manager().resourceManager().internalContext().randomResourceName("pip", 9);
362-
this.creatablePip = this.manager()
363-
.publicIpAddresses()
364-
.define(pipName)
365-
.withRegion(this.regionName())
366-
.withExistingResourceGroup(this.resourceGroupName());
373+
this.withNewPublicIpAddress();
367374
}
368375
return this.creatablePip;
369376
}

0 commit comments

Comments
 (0)