批量删除资源组列表的最佳方法

Best way to do a batch removal of a list of resouce groups

我目前正在 Azure 中自动执行一些清理操作,我的代码结构基本上是:

目前删除操作很简单:

// Inside the for loop that iterates over a list of resource group names

elif rg.tags.get('delete_at', False):

    if datetime.now() > datetime.strptime(rg.tags['delete_at'], '%Y-%m-%d %H:%M:%S'):
        print('Resource Group: ' + rg.name + ' is going to be deleted')
        try:
            delete_async_op = delete_rg(rg_client, rg.name)
            delete_async_op.wait()
        except CloudError:
            # If any of the delete operation fails, don't block the policy execution over the rest of resource groups
            print("The delete operation for the resource group: '" + rg.name + "' didn't suceed. Details: " + traceback.format_exc())
            continue

仅供记录,delete_rg 函数只是一个执行以下操作的包装器:

rg_client.resource_groups.delete(rg_name)

所以我想知道是否有更有效的方法来做到这一点。 也许有应该删除的资源组的名称列表并为这些操作创建线程?只是猜测,寻求一些建议。

非常感谢! 如果我的问题不够清楚,请告诉我。

删除操作实际上已经为您创建了一个线程,您在执行时就加入了线程"wait()"。 我建议您将 delete_async_op 放在一个列表中,然后全部启动,然后等待。

类似于:

delete_list = []

# your main loop

elif rg.tags.get('delete_at', False):

    if datetime.now() > datetime.strptime(rg.tags['delete_at'], '%Y-%m-%d %H:%M:%S'):
        print('Resource Group: ' + rg.name + ' is going to be deleted')
        try:
            delete_list.append(delete_rg(rg_client, rg.name))
        except CloudError:
            # If any of the delete operation fails, don't block the policy execution over the rest of resource groups
            print("The delete operation for the resource group: '" + rg.name + "' didn't suceed. Details: " + traceback.format_exc())
            continue

# out of main loop

for op in delete_list:
    try:
        op.wait()
    except CloudError:
        print("Unable to confirm deletion")

请求删除的初始调用是在您的 "if" 中完成的(这就是您要捕获 CloudError 的原因)。使用线程的轮询是在 wait() 中完成的,但是由于实际调用了 Azure,您仍然需要捕获 CloudError 以防万一。

(我在 MS Python SDK 团队工作)