我正在从azure ARM中删除VM。使用java-sdk删除虚拟机时,虚拟机删除成功,磁盘和网络未删除。它将VHD文件保存在存储器中。我也试过卸载磁盘,但它将从虚拟机中分离磁盘,但不删除vhd。
删除虚拟机:-
azure.virtualMachines().delete("resourceGroupName", "vmName");
分离磁盘:-
azure.virtualMachines().getByGroup("resourceGroupName", "vmName");
vm.update().withoutDataDisk("diskName").apply();
即使在执行上述操作后,VHD文件仍存在于存储中。
这是由Azure-Storage解决的。你必须从附加的存储帐户中删除blob vhd文件。
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient cloudBlobClient = cloudStorageAccount.createCloudBlobClient();
Iterable<CloudBlobContainer> containersList= cloudBlobClient.listContainers();
for(CloudBlobContainer container:containersList)
{
String currentContainerName = container.getName();
logger.debug("Current Container Name : "+currentContainerName);
CloudBlobContainer blobContainer = cloudBlobClient.getContainerReference(currentContainerName);
CloudPageBlob pageBlob = blobContainer.getPageBlobReference(diskName);
if(pageBlob.exists())
return pageBlob.deleteIfExists();
}
更多细节请参考azure storage git
@PawanSharma,据我所知,如果你想一次性删除虚拟机及其相关的所有资源,你只需要删除包含虚拟机和所有其他资源的资源组,或者手动逐个删除这些资源。
根据你的代码,我判断你使用的是Azure SDK for Java的1.0.0-beta
版本,所以我建议你可以尝试使用下面的代码来做。
azure.resourceGroups().delete("<resource-group-name>");
作为参考,您可以参考GitHub上的示例代码。
同时,另一种没有Azure SDK的方式是使用Azure REST API Delete a resource group
,我认为这是一种更清晰的理解方式。
创建虚拟机时需要添加Delete选项。
的例子:
azureResourceManager.virtualMachines().define(linuxVMName)
.withRegion(Region.GERMANY_WEST_CENTRAL)
.withExistingResourceGroup(myResourceGroup)
.withExistingPrimaryNetworkInterface(myNetworkInterface)
.withGeneralizedLinuxCustomImage(myImageId)
.withRootUsername(myUsername)
.withSsh(mySshPublicKey)
//deleteOptions for related disc
.withOSDiskDeleteOptions(DeleteOptions.DELETE)
//deleteOptions for related network interface
.withPrimaryNetworkInterfaceDeleteOptions(DeleteOptions.DELETE)
.withSize(VirtualMachineSizeTypes.STANDARD_B2MS)
.create();