【问题标题】:How to delete disks while delete VM in Azure ARM using java sdk?如何在使用 java sdk 删除 Azure ARM 中的 VM 时删除磁盘?
【发布时间】:2017-01-07 01:42:46
【问题描述】:

我正在从 azure ARM 中删除 VM。当我使用 java-sdk 删除虚拟机时,虚拟机删除成功,但磁盘和网络没有被删除。它将 VHD 文件保存在存储中。我也尝试分离磁盘,但它会从 VM 分离磁盘但不会删除 VHD。

删除虚拟机:-

azure.virtualMachines().delete("resourceGroupName", "vmName");

分离磁盘:-

azure.virtualMachines().getByGroup("resourceGroupName", "vmName");
vm.update().withoutDataDisk("diskName").apply(); 

即使执行上述操作后,存储中仍存在 VHD 文件。 删除虚拟机时如何永久删除所有附加的磁盘?

【问题讨论】:

标签: java azure azure-resource-manager


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    @PawanSharma,据我所知,如果您想一次性删除VM及其相关的所有资源,您只需删除包含VM和所有其他资源的资源组,或者手动将这些资源一一删除。

    根据你的代码,我判断你使用的是Azure SDK for Java的1.0.0-beta版本,所以我建议你可以尝试使用下面的代码来做。

     azure.resourceGroups().delete("<resource-group-name>");
    

    作为参考,你可以参考GitHub上的sample code

    同时,没有 Azure SDK 的另一种方式是使用 Azure REST API Delete a resource group,我认为这是更清晰的理解方式。

    【讨论】:

    • @peter-pan-msft 这是有效的。我试过这个它正在工作。根据我的要求,不删除资源组只删除磁盘。有什么可以删除磁盘的。我发现从存储中删除 blob。你知道它是否有效。
    • @PawanSharma 尝试在 ASM 中使用 Azure Java SDK 的 REST API Delete VM Image 或函数 VirtualMachineVMImageOperations.deleteAsync(String vmImageName, boolean deleteFromStorage)
    • @peter-pan-msft Azure ASM 有不同的概念。正如您所建议的那样,在 ASM 中是可能的,但我正在寻找 Azure ARM SDk。
    • @PawanSharma 当然。您可能希望使用Template deployment 删除资源,请参考REST API Delete a template deployment。希望对您有所帮助。
    猜你喜欢
    • 2016-07-29
    • 2012-06-19
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2019-10-20
    • 2020-01-12
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多