How do I find to which device an EBS Volume is mounted with Python Boto v2.0?
boto.ec2.Volume has some interesting properies like attachment_state
and volume_state
. But are there any functions for device mapping?
boto.manage.volume has get_device(self, params)
but requires a CommandLineGetter.
Any pointers on how to proceed or some samples of using boto.manage
?
I believe attach_data.device is what your looking for. part of volume.
Heres an example, not sure if this is the best way, but it outputs volumeid, instanceid, and attachment_data something like:
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()
It isn't clear if you're running this from the instance itself or externally. If the latter, you will not need the metadata call. Just supply the instance 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)
Note that an instance may have multiple volumes, so robust code won't assume there's a single device.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With