我正在使用azure python sdk,我尝试将磁盘连接到处于停止状态的实例,例如,将磁盘连接到处于停止状态的虚拟机,我知道managedby
属性将为我提供未连接实例的磁盘,但是我无法获取任何API或属性来检查当前是否正在使用磁盘。
是否有任何方法可以将磁盘连接到虚拟机等已停止的实例?
答案 0 :(得分:1)
您可以执行以下操作:
compute_client = ComputeManagementClient(credentials, subscription_id)
# you can also list by subscription
# https://docs.microsoft.com/en-us/python/api/azure-mgmt-compute/azure.mgmt.compute.v2017_03_30.operations.disks_operations.disksoperations?view=azure-python#list-custom-headers-none--raw-false----operation-config-
disks = compute_client.disks.list_by_resource_group('resourcegroupname')
for disk in disks:
print disk
这将为您提供资源组中的所有磁盘。无法获取所有“孤立”磁盘。我认为您最好的选择是获取所有磁盘并查看它们是否已连接到某物上
其他示例:https://github.com/Azure/azure-sdk-for-python/wiki/Managed-Disk
答案 1 :(得分:1)
没有直接功能可以在Python SDK中列出附加到VM的磁盘,您只能按组或订阅列出受管磁盘。但是您可以在VM属性中将磁盘连接到VM。
例如,您可以像这样列出数据磁盘:
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.compute import ComputeManagementClient
from azure.mgmt.resource import ResourceManagementClient, SubscriptionClient
TENANT_ID = "xxxxx"
CLIENT_ID = "xxxxx"
KEY = "secret"
cred = ServicePrincipalCredentials(client_id = CLIENT_ID,
secret = KEY,
tenant = TENANT_ID)
subscription_id = "xxxxx"
compute_client = ComputeManagementClient(cred, subscription_id)
rg = "resourceGroupName"
vm_name = "vmName"
vm_info = compute_client.virtual_machines.get(rg, vm_name)
for disk in vm_info.storage_profile.data_disks:
print disk.managed_disk.id
答案 2 :(得分:0)
我正在检查对象disk
的所有字段,发现可以从name
字段中提取关联的VM的名称。例如,我在这里发现TestVM2_OsDisk_1_834968b1cdc341c78bfbc227c9ccacda
是TestVM2
的名称,name
是连接了磁盘的vm的名称。
因此,我通过使用正则表达式re.split('_OsDisk', disk.name)
从VM deallocated
字段中获得VM的名称,并使用适用于VM的Azure api检查VM状态,如果它给了我VM running
,则它位于停止状态,否则它将给我{{1}}。
这可能不是一个好方法,但这目前正在起作用。