Skip to main content
 首页 » 编程设计

python之使用 apache-libcloud 获取附加到节点的卷

2025年05月04日20pengyingh

如何获取当前附加到节点的卷列表?我有 Node 对象,但是由于我在使用 deploy_node 创建节点时使用 block 设备映射创建了卷,所以我没有可以使用的卷对象用作引用。

请您参考如下方法:

我发现没有直接的方法来获取附加到节点的 StorageVolume 列表。但是,有一个解决方案。

借助 EC2 驱动程序,您可以使用 Node 的 block 设备映射来获取卷 ID 和设备名称。获得卷 ID 后,您可以轻松地从 list_volumes() 返回的列表中选择该卷。下面,我通过获取设备名称为 /dev/sdb 的 EBS 卷的 ID 附加到 Node 然后选择匹配的 StorageVolume 来演示这一点> 来自 list_volumes() 返回的列表。

vol_id = [x['ebs']['volume_id'] for x in node.extra['block_device_mapping'] 
          if x['device_name'] == '/dev/sdb'][0] 
# vol_id is a string 
volume = [v for v in driver.list_volumes() if v.id == vol_id][0] 
# volume is a StorageVolume 

请记住,如果您使用的驱动程序未在其 Node 的 extra 中提供 block 设备映射,则无法使用此确切方法> 听写。如果您没有使用 EC2 驱动程序,请首先检查 Node 的 extra 字典提供了哪些元数据。