Skip to content

Commit d110970

Browse files
mgmt, support validateMoveResources (Azure#24465)
1 parent 5fd44e7 commit d110970

File tree

5 files changed

+927
-9
lines changed

5 files changed

+927
-9
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
### Features Added
66

7+
- Added support for `validateMoveResources` in `GenericResources`.
8+
79
### Breaking Changes
810

911
### Bugs Fixed

sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/implementation/GenericResourcesImpl.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,21 @@ public GenericResource get(
185185
return null;
186186
}
187187

188+
@Override
189+
public void validateMoveResources(String sourceResourceGroupName, ResourceGroup targetResourceGroup,
190+
List<String> resourceIds) {
191+
validateMoveResourcesAsync(sourceResourceGroupName, targetResourceGroup, resourceIds).block();
192+
}
193+
194+
@Override
195+
public Mono<Void> validateMoveResourcesAsync(String sourceResourceGroupName, ResourceGroup targetResourceGroup,
196+
List<String> resourceIds) {
197+
ResourcesMoveInfo moveInfo = new ResourcesMoveInfo();
198+
moveInfo.withTargetResourceGroup(targetResourceGroup.id());
199+
moveInfo.withResources(resourceIds);
200+
return this.inner().validateMoveResourcesAsync(sourceResourceGroupName, moveInfo);
201+
}
202+
188203
@Override
189204
public GenericResource get(
190205
String resourceGroupName,
@@ -222,16 +237,16 @@ public GenericResource get(
222237

223238
@Override
224239
public void moveResources(String sourceResourceGroupName,
225-
ResourceGroup targetResourceGroup, List<String> resources) {
226-
this.moveResourcesAsync(sourceResourceGroupName, targetResourceGroup, resources).block();
240+
ResourceGroup targetResourceGroup, List<String> resourceIds) {
241+
this.moveResourcesAsync(sourceResourceGroupName, targetResourceGroup, resourceIds).block();
227242
}
228243

229244
@Override
230245
public Mono<Void> moveResourcesAsync(String sourceResourceGroupName,
231-
ResourceGroup targetResourceGroup, List<String> resources) {
246+
ResourceGroup targetResourceGroup, List<String> resourceIds) {
232247
ResourcesMoveInfo moveInfo = new ResourcesMoveInfo();
233248
moveInfo.withTargetResourceGroup(targetResourceGroup.id());
234-
moveInfo.withResources(resources);
249+
moveInfo.withResources(resourceIds);
235250
return this.inner().moveResourcesAsync(sourceResourceGroupName, moveInfo);
236251
}
237252

sdk/resourcemanager/azure-resourcemanager-resources/src/main/java/com/azure/resourcemanager/resources/models/GenericResources.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,25 +175,48 @@ GenericResource get(
175175
String resourceType,
176176
String resourceName);
177177

178+
/**
179+
* Validates move resources from one resource group to another.
180+
* If validation fails, {@link com.azure.core.management.exception.ManagementException} is thrown.
181+
*
182+
* @param sourceResourceGroupName Source resource group name
183+
* @param targetResourceGroup target resource group, can be in a different subscription
184+
* @param resourceIds the list of IDs of the resources to move
185+
*/
186+
void validateMoveResources(String sourceResourceGroupName, ResourceGroup targetResourceGroup,
187+
List<String> resourceIds);
188+
189+
/**
190+
* Validates move resources from one resource group to another asynchronously.
191+
* If validation fails, {@link com.azure.core.management.exception.ManagementException} is thrown.
192+
*
193+
* @param sourceResourceGroupName Source resource group name
194+
* @param targetResourceGroup target resource group, can be in a different subscription
195+
* @param resourceIds the list of IDs of the resources to move
196+
* @return a representation of the deferred computation of this call
197+
*/
198+
Mono<Void> validateMoveResourcesAsync(String sourceResourceGroupName, ResourceGroup targetResourceGroup,
199+
List<String> resourceIds);
200+
178201
/**
179202
* Move resources from one resource group to another.
180203
*
181204
* @param sourceResourceGroupName Source resource group name
182205
* @param targetResourceGroup target resource group, can be in a different subscription
183-
* @param resources the list of IDs of the resources to move
206+
* @param resourceIds the list of IDs of the resources to move
184207
*/
185-
void moveResources(String sourceResourceGroupName, ResourceGroup targetResourceGroup, List<String> resources);
208+
void moveResources(String sourceResourceGroupName, ResourceGroup targetResourceGroup, List<String> resourceIds);
186209

187210
/**
188211
* Move resources from one resource group to another asynchronously.
189212
*
190213
* @param sourceResourceGroupName Source resource group name
191214
* @param targetResourceGroup target resource group, can be in a different subscription
192-
* @param resources the list of IDs of the resources to move
215+
* @param resourceIds the list of IDs of the resources to move
193216
* @return a representation of the deferred computation of this call
194217
*/
195-
Mono<Void> moveResourcesAsync(String sourceResourceGroupName,
196-
ResourceGroup targetResourceGroup, List<String> resources);
218+
Mono<Void> moveResourcesAsync(String sourceResourceGroupName, ResourceGroup targetResourceGroup,
219+
List<String> resourceIds);
197220

198221
/**
199222
* Delete resource and all of its child resources.

sdk/resourcemanager/azure-resourcemanager-resources/src/test/java/com/azure/resourcemanager/resources/GenericResourcesTests.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import com.azure.core.http.HttpPipeline;
77
import com.azure.core.http.rest.PagedIterable;
8+
import com.azure.core.management.exception.ManagementException;
89
import com.azure.core.util.Context;
910
import com.azure.core.util.polling.LongRunningOperationStatus;
1011
import com.azure.core.util.polling.PollResponse;
@@ -17,6 +18,7 @@
1718
import com.azure.resourcemanager.resources.models.GenericResource;
1819
import com.azure.resourcemanager.resources.models.GenericResources;
1920
import com.azure.resourcemanager.resources.models.Identity;
21+
import com.azure.resourcemanager.resources.models.ResourceGroup;
2022
import com.azure.resourcemanager.resources.models.ResourceGroups;
2123
import com.azure.resourcemanager.resources.models.ResourceIdentityType;
2224
import com.azure.resourcemanager.resources.models.Sku;
@@ -26,6 +28,9 @@
2628

2729
import java.time.Duration;
2830
import java.util.Arrays;
31+
import java.util.Collections;
32+
import java.util.HashMap;
33+
import java.util.Map;
2934
import java.util.Optional;
3035

3136
public class GenericResourcesTests extends ResourceManagementTest {
@@ -100,6 +105,55 @@ public void canCreateUpdateMoveResource() throws Exception {
100105
Assertions.assertFalse(genericResources.checkExistenceById(resource.id()));
101106
}
102107

108+
@Test
109+
public void canValidateMoveResources() throws Exception {
110+
final String resourceName = "rs" + testId;
111+
final Map<String, Object> properties = new HashMap<>();
112+
properties.put("publicIPAllocationMethod", "Dynamic");
113+
114+
GenericResource resource = genericResources.define(resourceName)
115+
.withRegion(Region.US_EAST2)
116+
.withExistingResourceGroup(rgName)
117+
.withResourceType("publicIPAddresses")
118+
.withProviderNamespace("Microsoft.Network")
119+
.withoutPlan()
120+
.withProperties(properties)
121+
.create();
122+
123+
ResourceGroup targetResourceGroup = resourceGroups.getByName(newRgName);
124+
// validate pass as public IP can be moved
125+
genericResources.validateMoveResources(rgName, targetResourceGroup, Collections.singletonList(resource.id()));
126+
127+
// create resource in target group with same name
128+
GenericResource resource2 = genericResources.define(resourceName)
129+
.withRegion(Region.US_EAST2)
130+
.withExistingResourceGroup(newRgName)
131+
.withResourceType("publicIPAddresses")
132+
.withProviderNamespace("Microsoft.Network")
133+
.withoutPlan()
134+
.withProperties(properties)
135+
.create();
136+
137+
// validate fail as name conflict
138+
Assertions.assertThrows(ManagementException.class, () -> {
139+
genericResources.validateMoveResources(rgName, targetResourceGroup, Collections.singletonList(resource.id()));
140+
});
141+
142+
final String resourceName3 = "rs2" + testId;
143+
GenericResource resource3 = genericResources.define(resourceName3)
144+
.withRegion(Region.US_EAST2)
145+
.withExistingResourceGroup(rgName)
146+
.withResourceType("userAssignedIdentities")
147+
.withProviderNamespace("Microsoft.ManagedIdentity")
148+
.withoutPlan()
149+
.create();
150+
151+
// validate fail as managed identity does not support move
152+
Assertions.assertThrows(ManagementException.class, () -> {
153+
genericResources.validateMoveResources(rgName, targetResourceGroup, Collections.singletonList(resource3.id()));
154+
});
155+
}
156+
103157
@Test
104158
public void canCreateDeleteResourceSyncPoll() throws Exception {
105159
final long defaultDelayInMillis = 10 * 1000;

sdk/resourcemanager/azure-resourcemanager-resources/src/test/resources/session-records/GenericResourcesTests.canValidateMoveResources.json

Lines changed: 824 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)