Skip to content

Commit e963fe4

Browse files
authored
mgmt compute support force delete (Azure#18441)
* mgmt compute support force delete * update changelog * update description for virtual machine force delete
1 parent 8614521 commit e963fe4

File tree

5 files changed

+870
-0
lines changed

5 files changed

+870
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## 2.2.0-beta.1 (Unreleased)
44

55
- Updated `api-version` to `2020-06-01`
6+
- Supported virtual machines force delete
67

78
## 2.1.0 (2020-11-24)
89

sdk/resourcemanager/azure-resourcemanager-compute/src/main/java/com/azure/resourcemanager/compute/implementation/VirtualMachinesImpl.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,46 @@ public Accepted<Void> beginDeleteByResourceGroup(String resourceGroupName, Strin
221221
null);
222222
}
223223

224+
@Override
225+
public void deleteById(String id, boolean forceDeletion) {
226+
deleteByIdAsync(id, forceDeletion).block();
227+
}
228+
229+
@Override
230+
public Mono<Void> deleteByIdAsync(String id, boolean forceDeletion) {
231+
return deleteByResourceGroupAsync(
232+
ResourceUtils.groupFromResourceId(id), ResourceUtils.nameFromResourceId(id), forceDeletion);
233+
}
234+
235+
@Override
236+
public void deleteByResourceGroup(String resourceGroupName, String name, boolean forceDeletion) {
237+
deleteByResourceGroupAsync(resourceGroupName, name, forceDeletion).block();
238+
}
239+
240+
@Override
241+
public Mono<Void> deleteByResourceGroupAsync(String resourceGroupName, String name, boolean forceDeletion) {
242+
return this.inner().deleteAsync(resourceGroupName, name, forceDeletion);
243+
}
244+
245+
@Override
246+
public Accepted<Void> beginDeleteById(String id, boolean forceDeletion) {
247+
return beginDeleteByResourceGroup(
248+
ResourceUtils.groupFromResourceId(id), ResourceUtils.nameFromResourceId(id), forceDeletion);
249+
}
250+
251+
@Override
252+
public Accepted<Void> beginDeleteByResourceGroup(String resourceGroupName, String name, boolean forceDeletion) {
253+
return AcceptedImpl
254+
.newAccepted(
255+
logger,
256+
this.manager().serviceClient().getHttpPipeline(),
257+
this.manager().serviceClient().getDefaultPollInterval(),
258+
() -> this.inner().deleteWithResponseAsync(resourceGroupName, name, forceDeletion).block(),
259+
Function.identity(),
260+
Void.class,
261+
null);
262+
}
263+
224264
// Getters
225265
@Override
226266
public VirtualMachineSizes sizes() {

sdk/resourcemanager/azure-resourcemanager-compute/src/main/java/com/azure/resourcemanager/compute/models/VirtualMachines.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,4 +263,59 @@ Mono<RunCommandResult> runShellScriptAsync(
263263
* @return the accepted deleting operation
264264
*/
265265
Accepted<Void> beginDeleteByResourceGroup(String resourceGroupName, String name);
266+
267+
/**
268+
* Force delete a resource from Azure, identifying it by its resource ID.
269+
*
270+
* @param id the resource ID of the resource to delete
271+
* @param forceDeletion force delete without graceful shutdown
272+
*/
273+
void deleteById(String id, boolean forceDeletion);
274+
275+
/**
276+
* Asynchronously force delete a resource from Azure, identifying it by its resource ID.
277+
*
278+
* @param id the resource ID of the resource to delete
279+
* @param forceDeletion force delete without graceful shutdown
280+
* @return a representation of the deferred computation of this call
281+
*/
282+
Mono<Void> deleteByIdAsync(String id, boolean forceDeletion);
283+
284+
/**
285+
* Force delete a resource from Azure, identifying it by its name and its resource group.
286+
*
287+
* @param resourceGroupName the resource group the resource is part of
288+
* @param name the name of the resource
289+
* @param forceDeletion force delete without graceful shutdown
290+
*/
291+
void deleteByResourceGroup(String resourceGroupName, String name, boolean forceDeletion);
292+
293+
/**
294+
* Asynchronously force delete a resource from Azure, identifying it by its name and its resource group.
295+
*
296+
* @param resourceGroupName the resource group the resource is part of
297+
* @param name the name of the resource
298+
* @param forceDeletion force delete without graceful shutdown
299+
* @return a representation of the deferred computation of this call
300+
*/
301+
Mono<Void> deleteByResourceGroupAsync(String resourceGroupName, String name, boolean forceDeletion);
302+
303+
/**
304+
* Begins force deleting a virtual machine from Azure, identifying it by its resource ID.
305+
*
306+
* @param id the resource ID of the virtual machine to delete
307+
* @param forceDeletion force delete without graceful shutdown
308+
* @return the accepted deleting operation
309+
*/
310+
Accepted<Void> beginDeleteById(String id, boolean forceDeletion);
311+
312+
/**
313+
* Begins force deleting a virtual machine from Azure, identifying it by its name and its resource group.
314+
*
315+
* @param resourceGroupName the resource group the resource is part of
316+
* @param name the virtual machine name
317+
* @param forceDeletion force delete without graceful shutdown
318+
* @return the accepted deleting operation
319+
*/
320+
Accepted<Void> beginDeleteByResourceGroup(String resourceGroupName, String name, boolean forceDeletion);
266321
}

sdk/resourcemanager/azure-resourcemanager-compute/src/test/java/com/azure/resourcemanager/compute/VirtualMachineOperationsTests.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,42 @@ public void canPerformSimulateEvictionOnSpotVirtualMachine() {
866866
Assertions.assertEquals(DiskState.RESERVED, disk.innerModel().diskState());
867867
}
868868

869+
@Test
870+
public void canForceDeleteVirtualMachine() {
871+
// Create
872+
computeManager.virtualMachines()
873+
.define(vmName)
874+
.withRegion("eastus2euap")
875+
.withNewResourceGroup(rgName)
876+
.withNewPrimaryNetwork("10.0.0.0/28")
877+
.withPrimaryPrivateIPAddressDynamic()
878+
.withoutPrimaryPublicIPAddress()
879+
.withPopularWindowsImage(KnownWindowsVirtualMachineImage.WINDOWS_SERVER_2012_R2_DATACENTER)
880+
.withAdminUsername("Foo12")
881+
.withAdminPassword("abc!@#F0orL")
882+
.create();
883+
// Get
884+
VirtualMachine virtualMachine = computeManager.virtualMachines().getByResourceGroup(rgName, vmName);
885+
Assertions.assertNotNull(virtualMachine);
886+
Assertions.assertEquals(Region.fromName("eastus2euap"), virtualMachine.region());
887+
String nicId = virtualMachine.primaryNetworkInterfaceId();
888+
889+
// Force delete
890+
computeManager.virtualMachines().deleteById(virtualMachine.id(), true);
891+
892+
try {
893+
virtualMachine = computeManager.virtualMachines().getById(virtualMachine.id());
894+
} catch (ManagementException ex) {
895+
virtualMachine = null;
896+
Assertions.assertEquals(404, ex.getResponse().getStatusCode());
897+
}
898+
Assertions.assertNull(virtualMachine);
899+
900+
// check if nic exists after force delete vm
901+
NetworkInterface nic = networkManager.networkInterfaces().getById(nicId);
902+
Assertions.assertNotNull(nic);
903+
}
904+
869905
private CreatablesInfo prepareCreatableVirtualMachines(
870906
Region region, String vmNamePrefix, String networkNamePrefix, String publicIpNamePrefix, int vmCount) {
871907

0 commit comments

Comments
 (0)