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

时间:2014-06-30 02:13:52

标签: python amazon-web-services amazon-ec2 libcloud

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

1 个答案:

答案 0 :(得分:1)

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

使用EC2驱动程序,您可以使用Node的块设备映射来获取卷ID和设备名称。获得卷ID后,您可以从list_volumes()返回的列表中轻松选择该卷。下面,我通过获取附加到/dev/sdb的设备名称Node的EBS卷的ID,然后从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的{​​{1}} dict中提供块设备映射,则无法使用此确切方法。如果您不使用EC2驱动程序,请首先检查extra的{​​{1}}字典提供的元数据。