AWS: EC2 情報の簡易一覧表示
こちらの改良版。
mog project: AWS: Brief Listing of EC2 Instances
インスタンスの他に、ボリューム、スナップショットの一覧も表示。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import subprocess
try:
import json
except ImportError:
print('You need python 2.6 or later to run this script.')
sys.exit(1)
def list_instances():
print('Instances:')
command_args = ['describe-instances']
headers = [
('Name', 16),
('Instance', 16),
('Type', 10),
('Launch Time', 26),
('State', 12),
]
def generator(output):
for i in output['Reservations'][0]['Instances']:
yield [
get_name(i),
i['InstanceId'],
i['InstanceType'],
i['LaunchTime'],
i['State']['Name'],
]
print_list(command_args, headers, generator)
def list_volumes():
print('Volumes:')
command_args = ['describe-volumes']
headers = [
('Name', 16),
('Volume ID', 16),
('Cap', 8),
('Type', 11),
('Zone', 17),
('State', 12),
]
def generator(output):
for i in output['Volumes']:
yield [
get_name(i),
i['VolumeId'],
'%d GB' % i['Size'],
i['VolumeType'],
i['AvailabilityZone'],
i['State'],
]
print_list(command_args, headers, generator)
def list_snapshots():
print('Snapshots:')
command_args = ['describe-snapshots', '--owner-ids', 'self']
headers = [
('Name', 16),
('Snapshot ID', 16),
('Cap', 8),
('Start Time', 28),
('State', 12),
]
def generator(output):
for i in output['Snapshots']:
yield [
get_name(i),
i['SnapshotId'],
'%d GB' % i['VolumeSize'],
i['StartTime'],
i['State'],
]
print_list(command_args, headers, generator)
def get_name(obj):
return ''.join(
[x['Value'] for x in obj.get('Tags', []) if x['Key'] == 'Name'])
def print_list(command_args, headers, generator):
# Print header.
print(''.join([x[0].ljust(x[1]) for x in headers]))
print('-' * sum([x[1] for x in headers]))
# Run command.
stdout = subprocess.check_output(['aws', 'ec2'] + command_args)
output = json.loads(stdout)
# Print result.
for result in generator(output):
print(''.join(
[result[i][:x[1] - 1].ljust(x[1]) for i, x in enumerate(headers)]))
# Print footer.
print('')
if __name__ == '__main__':
list_instances()
list_volumes()
list_snapshots()
0 件のコメント:
コメントを投稿