从资源对象Azure SDK Python获取资源组名称

问题描述

只是想知道是否有一种简单的方法可以从Azure资源对象(例如磁盘,Snapshot对象)获取资源组名称

当前,我使用资源URI并从中获取资源组:

# ID example: '/subscriptions/123/resourceGroups/MyRG/providers/Microsoft.Compute/disks/disk-a
resource_group = [value for value in str(disk.id).split("/") if value][3]

输出

>> MyRG

我似乎看不到一种做某事的方法

disk.resource_group

解决方法

看着MSDN,我不相信有一个resource_group属性。

我通常要做的是创建一个方法(类似于您所做的)以从资源ID中获取资源组:

def get_resource_group_from_id(resource_id):
    return resource_id.lstrip("/").split("/")[3]

然后我只在需要获取资源组的地方使用此方法:

from azure.mgmt.compute import ComputeManagementClient
from azure.common.client_factory import get_client_from_cli_profile

compute_client = get_client_from_cli_profile(ComputeManagementClient)

for disk in compute_client.disks.list():
    resource_group = get_resource_group_from_id(resource_id=disk.id)

但是,我不喜欢这个,因为我习惯于直接从资源中获取它。

您可以使用azure-sdk-for-python提出一个功能请求,以将该属性包含在对象中。 Azure PowerShell和Azure CLI包含此属性,所以我看不到为什么Azure Python SDK不应该包含它。

另一种选择是包含一个resource_group标签,然后您可以直接从资源中获取它。

,

以下是适用于python的Azure SDK:

https://docs.microsoft.com/en-us/python/api/overview/azure/?view=azure-python

我认为您的需求需要特定于特定的服务,并且通常,较大的范围可以特定于较小的范围,但是每种服务的特定对象似乎都没有定义获取相应资源的方法组。我认为您的想法可能不会实现。