批量删除资源组列表的最佳方法
Best way to do a batch removal of a list of resouce groups
我目前正在 Azure 中自动执行一些清理操作,我的代码结构基本上是:
- 遍历应删除的资源组列表的巨大 for 循环。
- 如果这些组中的任何一个缺少我定义的必需标签列表,请删除该资源组。
目前删除操作很简单:
// 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 团队工作)
我目前正在 Azure 中自动执行一些清理操作,我的代码结构基本上是:
- 遍历应删除的资源组列表的巨大 for 循环。
- 如果这些组中的任何一个缺少我定义的必需标签列表,请删除该资源组。
目前删除操作很简单:
// 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 团队工作)