【问题标题】:Get disks attached to stopped instances using python sdk使用 python sdk 获取附加到已停止实例的磁盘
【发布时间】:2019-02-01 06:40:54
【问题描述】:

我正在研究 azure python sdk,我尝试将磁盘附加到处于停止状态的实例,例如附加到处于停止状态的虚拟机的磁盘,我知道 managedby 属性会给我没有附加实例的磁盘,但我没有能够获取任何 api 或属性来检查磁盘当前是否在使用中。

是否有任何方法可以将磁盘附加到已停止的实例(如虚拟机)?

【问题讨论】:

  • 我不清楚你的问题。如果磁盘附加到 VM。然后无论 VM 停止或运行,磁盘都将处于使用状态。那么你在这个问题中的真正意思是什么?
  • 他只是不知道该怎么做,就是这样
  • ok @CharlesXu,有什么方法可以得到这些磁盘吗?
  • 还有问题吗?

标签: azure azure-disk


【解决方案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

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

    • 复制我的答案有什么意义?这不会添加任何新内容
    • @4c74356b41 我不认为我复制了您的答案。您只是按组列出托管磁盘,而不是完全附加的磁盘。
    【解决方案3】:

    我正在检查对象 disk 的所有字段,我发现关联 VM 的名称可以从 name 字段中提取。例如,我在这里找到名称 TestVM2_OsDisk_1_834968b1cdc341c78bfbc227c9ccacda TestVM2 是连接磁盘的虚拟机的名称。

    所以,我使用正则表达式 re.split('_OsDisk', disk.name)name 字段中获取 VM 的名称,并使用用于 VM 的 azure api 检查 VM 状态,如果它给了我 VM deallocated,那么它处于停止状态,或者它会给出我VM running

    这可能不是一个好方法,但目前可行。

    【讨论】:

    • 请注意,只有默认命名的磁盘具有此名称。您可以创建具有任何名称的磁盘并将其附加到具有任何名称的虚拟机(只要它们在同一区域中)
    • @VikasGautam 你让我对你想要什么感到困惑。磁盘的虚拟机?还是连接到 VM 的磁盘?
    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 2020-01-30
    • 2019-02-25
    • 2021-06-19
    • 1970-01-01
    • 2019-07-21
    • 2020-05-03
    • 2011-07-20
    相关资源
    最近更新 更多