如何通过Azure Python SDK的for循环获取多台VM的已有OS磁盘及多数据磁盘ID
使用Azure Python SDK批量获取虚拟机磁盘ID
前置准备
- 安装必要的Python包:
pip install azure-mgmt-compute azure-identity - 确保本地已配置Azure认证(如
az login、环境变量或服务主体)
代码实现
以下示例会遍历指定订阅下所有资源组的虚拟机,提取每台VM的OS磁盘ID和所有数据磁盘ID:
from azure.identity import DefaultAzureCredential from azure.mgmt.compute import ComputeManagementClient # 配置订阅ID SUBSCRIPTION_ID = "你的订阅ID" # 初始化客户端 credential = DefaultAzureCredential() compute_client = ComputeManagementClient(credential, SUBSCRIPTION_ID) # 遍历所有资源组下的VM for vm in compute_client.virtual_machines.list_all(): # 获取VM基本信息 vm_name = vm.name resource_group = vm.id.split('/')[4] # 从VM ID中解析资源组名称 print(f"\n=== 虚拟机: {vm_name} (资源组: {resource_group}) ===") # 获取OS磁盘ID os_disk_id = vm.storage_profile.os_disk.id print(f"操作系统磁盘ID: {os_disk_id}") # 获取所有数据磁盘ID data_disks = vm.storage_profile.data_disks if data_disks: print("数据磁盘ID列表:") for idx, disk in enumerate(data_disks, 1): print(f" 数据磁盘{idx}: {disk.id}") else: print("无数据磁盘")
如果只需要遍历指定资源组的VM,替换遍历部分为:
RESOURCE_GROUP_NAME = "你的资源组名称" for vm in compute_client.virtual_machines.list(resource_group_name=RESOURCE_GROUP_NAME): # 后续逻辑同上
关键点说明
vm.storage_profile.os_disk.id:直接从VM的存储配置中提取OS磁盘的唯一IDvm.storage_profile.data_disks:返回该VM关联的所有数据磁盘对象列表,每个对象的id属性就是磁盘IDlist_all()方法会拉取订阅下所有VM,若订阅内VM数量较多,可考虑添加分页处理或过滤条件
内容的提问来源于stack exchange,提问作者satish B
相关产品推荐
相关产品推荐

