CLI 命令的 boto 解释
boto interpretation of the CLI command
以下 Boto 代码向我打印了不需要的输出,我希望看到我的 EBS 卷状态而不是挂载点的状态。
EC2 预留结构:
object {1}
Reservations [1]
Instances[1]
BlockDeviceMappings[2]
DiviceName
Ebs{4}
Status
DeleteOnTermination
VolumeId
AttachTime
reservations = ec2Conn.get_all_instances(instance_ids=[my_id])
for reservation in reservations:
for instance in reservation.instances:
for BlockDeviceMappings in instance.block_device_mapping:
print(BlockDeviceMappings)
打印我:
/dev/sdf
/dev/sda1
以下 AWS CLI 命令向我显示正确的状态:
aws ec2 describe-instances --instance myinstance-id --query Reservations[*].Instances[*].BlockDeviceMappings[*].{Ebs:Ebs.{s:Status}}
如果您查看 raw
回复,它看起来类似于:
<blockDeviceMapping>
<item>
<deviceName>/dev/sda1</deviceName>
<ebs>
<volumeId>vol-xxxxxxxxxx</volumeId>
<status>attached</status>
<attachTime>2014-04-01T02:23:54.000Z</attachTime>
<deleteOnTermination>true</deleteOnTermination>
</ebs>
</item>
<item>
<deviceName>/dev/sdb</deviceName>
<ebs>
<volumeId>vol-xxxxxxx</volumeId>
<status>attached</status>
<attachTime>2014-04-01T02:23:54.000Z</attachTime>
<deleteOnTermination>false</deleteOnTermination>
</ebs>
</item>
</blockDeviceMapping>
所以你所要做的就是比你更深一层。
>>> import boto
>>> ec2 = boto.connect_ec2()
>>> [ebs.status for _, ebs in ec2.get_all_instances(instance_ids=['i-xxxxxx'])[0].instances[0].block_device_mapping.items()]
[u'attached', u'attached']
或使用 Boto3
如果您的目标是获得 "look" 非常接近 aws cli 的 EBS 状态,您可以使用 boto3
:
>>> import boto3
>>> boto3.client('ec2')
>>> c.describe_instances(InstanceIds=['i-xxxxxx'])['Reservations'][0]['Instances'][0]['BlockDeviceMappings'][0]['Ebs']['Status']
'attached'
此代码片段将为您提供实例 ID、卷 ID 及其当前状态。通过挂载点,您还可以获得一个 boto.ec2.blockdevicemapping 对象,您可以使用它访问其属性,如下例所示。希望对你有帮助。
from boto.regioninfo import *
from boto.ec2.connection import EC2Connection
# AWS connect info
aws_access_key_id='########## AWS Access Key ############'
aws_secret_access_key='########### AWS Secret Key ############'
region_name='ap-southeast-1'
region_ec2_endpoint='ec2.ap-southeast-1.amazonaws.com'
# Connect EC2
aws_region = RegionInfo(name=region_name, endpoint=region_endpoint)
conn = EC2Connection(aws_access_key_id,aws_secret_access_key,region=aws_region)
reservations = conn.get_all_instances(instance_ids=[my_ids])
for each in reservations:
for vol in each.instances[0].block_device_mapping.items():
print str(each.instances[0].id) + " " + vol[1].volume_id + " "+ vol[1].status
其他一些与此类似的用例https://github.com/dvopsway/aws_scripts/
使用 CLI
response = json.loads(subprocess.check_output(
['aws', 'ec2', 'describe-volumes', '--volume-ids', Volume_ID, '--query',
'Volumes[*].{AZ:AvailabilityZone, size:Size, Device:Attachments[*].{Device:Device}}']))
Volume_AZ = response[0]['AZ']
Volume_Mount_Point = response[0]['Device'][0]['Device']
Volume_size = response[0]['size']
以下 Boto 代码向我打印了不需要的输出,我希望看到我的 EBS 卷状态而不是挂载点的状态。
EC2 预留结构:
object {1}
Reservations [1]
Instances[1]
BlockDeviceMappings[2]
DiviceName
Ebs{4}
Status
DeleteOnTermination
VolumeId
AttachTime
reservations = ec2Conn.get_all_instances(instance_ids=[my_id])
for reservation in reservations:
for instance in reservation.instances:
for BlockDeviceMappings in instance.block_device_mapping:
print(BlockDeviceMappings)
打印我:
/dev/sdf
/dev/sda1
以下 AWS CLI 命令向我显示正确的状态:
aws ec2 describe-instances --instance myinstance-id --query Reservations[*].Instances[*].BlockDeviceMappings[*].{Ebs:Ebs.{s:Status}}
如果您查看 raw
回复,它看起来类似于:
<blockDeviceMapping>
<item>
<deviceName>/dev/sda1</deviceName>
<ebs>
<volumeId>vol-xxxxxxxxxx</volumeId>
<status>attached</status>
<attachTime>2014-04-01T02:23:54.000Z</attachTime>
<deleteOnTermination>true</deleteOnTermination>
</ebs>
</item>
<item>
<deviceName>/dev/sdb</deviceName>
<ebs>
<volumeId>vol-xxxxxxx</volumeId>
<status>attached</status>
<attachTime>2014-04-01T02:23:54.000Z</attachTime>
<deleteOnTermination>false</deleteOnTermination>
</ebs>
</item>
</blockDeviceMapping>
所以你所要做的就是比你更深一层。
>>> import boto
>>> ec2 = boto.connect_ec2()
>>> [ebs.status for _, ebs in ec2.get_all_instances(instance_ids=['i-xxxxxx'])[0].instances[0].block_device_mapping.items()]
[u'attached', u'attached']
或使用 Boto3
如果您的目标是获得 "look" 非常接近 aws cli 的 EBS 状态,您可以使用 boto3
:
>>> import boto3
>>> boto3.client('ec2')
>>> c.describe_instances(InstanceIds=['i-xxxxxx'])['Reservations'][0]['Instances'][0]['BlockDeviceMappings'][0]['Ebs']['Status']
'attached'
此代码片段将为您提供实例 ID、卷 ID 及其当前状态。通过挂载点,您还可以获得一个 boto.ec2.blockdevicemapping 对象,您可以使用它访问其属性,如下例所示。希望对你有帮助。
from boto.regioninfo import *
from boto.ec2.connection import EC2Connection
# AWS connect info
aws_access_key_id='########## AWS Access Key ############'
aws_secret_access_key='########### AWS Secret Key ############'
region_name='ap-southeast-1'
region_ec2_endpoint='ec2.ap-southeast-1.amazonaws.com'
# Connect EC2
aws_region = RegionInfo(name=region_name, endpoint=region_endpoint)
conn = EC2Connection(aws_access_key_id,aws_secret_access_key,region=aws_region)
reservations = conn.get_all_instances(instance_ids=[my_ids])
for each in reservations:
for vol in each.instances[0].block_device_mapping.items():
print str(each.instances[0].id) + " " + vol[1].volume_id + " "+ vol[1].status
其他一些与此类似的用例https://github.com/dvopsway/aws_scripts/
使用 CLI
response = json.loads(subprocess.check_output(
['aws', 'ec2', 'describe-volumes', '--volume-ids', Volume_ID, '--query',
'Volumes[*].{AZ:AvailabilityZone, size:Size, Device:Attachments[*].{Device:Device}}']))
Volume_AZ = response[0]['AZ']
Volume_Mount_Point = response[0]['Device'][0]['Device']
Volume_size = response[0]['size']