如何使用java sdk在Azure ARM中删除虚拟机的同时删除磁盘



我正在从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();

最新更新