使用Boto查找已安装的设备和EBS卷

Vin*_*ten 10 python amazon-ec2 amazon-ebs boto

如何使用Python Boto v2.0找到装入EBS卷的设备?

boto.ec2.Volume有一些有趣的特性,比如attachment_statevolume_state.但是有任何设备映射功能吗?

boto.manage.volumeget_device(self, params),但需要CommandLineGetter.

关于如何进行或使用一些样品的任何指示boto.manage

小智 12

我相信attach_data.device正是你要找的.卷的一部分.

下面是一个例子,不确定这是否是最好的方法,但它输出volumeid,instanceid和attachment_data之类的东西:

Attached Volume ID - Instance ID - Device Name
vol-12345678 - i-ab345678 - /dev/sdp
vol-12345678 - i-ab345678 - /dev/sda1
vol-12345678 - i-cd345678 - /dev/sda1


import boto
ec2 = boto.connect_ec2()
res = ec2.get_all_instances()
instances = [i for r in res for i in r.instances]
vol = ec2.get_all_volumes()
def attachedvolumes():
    print 'Attached Volume ID - Instance ID','-','Device Name'
    for volumes in vol:
        if volumes.attachment_state() == 'attached':
            filter = {'block-device-mapping.volume-id':volumes.id}
            volumesinstance = ec2.get_all_instances(filters=filter)
            ids = [z for k in volumesinstance for z in k.instances]
            for s in ids:
                 print volumes.id,'-',s.id,'-',volumes.attach_data.device
# Get a list of unattached volumes           
def unattachedvolumes():
   for unattachedvol in vol:
       state = unattachedvol.attachment_state()
   if state == None:
        print unattachedvol.id, state
attachedvolumes()
unattachedvolumes()
Run Code Online (Sandbox Code Playgroud)


Jef*_*uer 8

目前尚不清楚你是从实例本身还是从外部运行它.如果是后者,则不需要元数据调用.只需提供实例ID.

from boto.ec2.connection import EC2Connection
from boto.utils import get_instance_metadata

conn = EC2Connection()
m = get_instance_metadata()
volumes = [v for v in conn.get_all_volumes() if v.attach_data.instance_id == m['instance-id']]

print volumes[0].attach_data.device
Run Code Online (Sandbox Code Playgroud)

请注意,实例可能有多个卷,因此强大的代码不会假设有单个设备.