Boto 问题列出没有标签的 AWS 实例
Boto issues listing AWS instances with no-tags
我为我的 AWS 实例使用自定义标签。我正在尝试在 CSV 文件中列出所有实例(运行 和已停止)。不是程序员,我搜索并 copied/pasted 代码并附带了一个运行良好的脚本。但我注意到,如果缺少一个标签,脚本就会抛出一个错误并就此停止。如果标签已创建但为空,则脚本会打印空白 space,但如果根本未创建标签,则脚本会停止。例如,如果标签 Owner 丢失,那么它会抛出错误 KeyError: 'Owner' 并停在那里。我的脚本粘贴在下面。有人可以让我知道我需要做哪些更改,以便如果标签不存在,脚本会打印出 N/A 而不是停止。
#!/usr/bin/env python
import boto.ec2
from boto.ec2 import EC2Connection
csv_file = open('/home/sbasnet/Scripts/Instances/instances_east.csv','w+')
def process_instance_list(connection):
map(build_instance_list,connection.get_all_instances())
def build_instance_list(reservation):
map(write_instances,reservation.instances)
def write_instances(instance):
if (instance.platform == 'windows'):
platform = 'Windows'
else:
platform = 'Linux'
csv_file.write("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n"%(instance.id,instance.private_ip_address,instance.tags['Classification'],instance.tags['FQDN'],instance.tags['Owner'],instance.tags['RunType'],instance.instance_type,instance.subnet_id,instance.key_name,platform,instance.placement))
csv_file.flush()
if __name__=="__main__":
connection = EC2Connection(aws_access_key_id='ACCESS',aws_secret_access_key='SECRET')
process_instance_list(connection)
csv_file.close()
TIA
sbasnet
也许像这样可以吗?
警告:未经测试
#!/usr/bin/env python
import boto.ec2
from boto.ec2 import EC2Connection
csv_file = open('/home/sbasnet/Scripts/Instances/instances_east.csv','w+')
def process_instance_list(connection):
map(build_instance_list,connection.get_all_instances())
def build_instance_list(reservation):
map(write_instances,reservation.instances)
def get_tag(tags, tag_name):
if tag_name in tags.keys():
return tags[tag_name]
else:
return "N/A"
def write_instances(instance):
if instance.platform == 'windows':
platform = 'Windows'
else:
platform = 'Linux'
csv_file.write("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n"%(instance.id,
instance.private_ip_address,
get_tag(instance.tags, "Classification"),
get_tag(instance.tags, "FQDN"),
get_tag(instance.tags, "Owner"),
get_tag(instance.tags, "RunType"),
instance.instance_type,
instance.subnet_id,
instance.key_name,
platform,
instance.placement))
csv_file.flush()
if __name__=="__main__":
connection = EC2Connection(aws_access_key_id='ACCESS',aws_secret_access_key='SECRET')
process_instance_list(connection)
csv_file.close()
我为我的 AWS 实例使用自定义标签。我正在尝试在 CSV 文件中列出所有实例(运行 和已停止)。不是程序员,我搜索并 copied/pasted 代码并附带了一个运行良好的脚本。但我注意到,如果缺少一个标签,脚本就会抛出一个错误并就此停止。如果标签已创建但为空,则脚本会打印空白 space,但如果根本未创建标签,则脚本会停止。例如,如果标签 Owner 丢失,那么它会抛出错误 KeyError: 'Owner' 并停在那里。我的脚本粘贴在下面。有人可以让我知道我需要做哪些更改,以便如果标签不存在,脚本会打印出 N/A 而不是停止。
#!/usr/bin/env python
import boto.ec2
from boto.ec2 import EC2Connection
csv_file = open('/home/sbasnet/Scripts/Instances/instances_east.csv','w+')
def process_instance_list(connection):
map(build_instance_list,connection.get_all_instances())
def build_instance_list(reservation):
map(write_instances,reservation.instances)
def write_instances(instance):
if (instance.platform == 'windows'):
platform = 'Windows'
else:
platform = 'Linux'
csv_file.write("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n"%(instance.id,instance.private_ip_address,instance.tags['Classification'],instance.tags['FQDN'],instance.tags['Owner'],instance.tags['RunType'],instance.instance_type,instance.subnet_id,instance.key_name,platform,instance.placement))
csv_file.flush()
if __name__=="__main__":
connection = EC2Connection(aws_access_key_id='ACCESS',aws_secret_access_key='SECRET')
process_instance_list(connection)
csv_file.close()
TIA sbasnet
也许像这样可以吗?
警告:未经测试
#!/usr/bin/env python
import boto.ec2
from boto.ec2 import EC2Connection
csv_file = open('/home/sbasnet/Scripts/Instances/instances_east.csv','w+')
def process_instance_list(connection):
map(build_instance_list,connection.get_all_instances())
def build_instance_list(reservation):
map(write_instances,reservation.instances)
def get_tag(tags, tag_name):
if tag_name in tags.keys():
return tags[tag_name]
else:
return "N/A"
def write_instances(instance):
if instance.platform == 'windows':
platform = 'Windows'
else:
platform = 'Linux'
csv_file.write("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n"%(instance.id,
instance.private_ip_address,
get_tag(instance.tags, "Classification"),
get_tag(instance.tags, "FQDN"),
get_tag(instance.tags, "Owner"),
get_tag(instance.tags, "RunType"),
instance.instance_type,
instance.subnet_id,
instance.key_name,
platform,
instance.placement))
csv_file.flush()
if __name__=="__main__":
connection = EC2Connection(aws_access_key_id='ACCESS',aws_secret_access_key='SECRET')
process_instance_list(connection)
csv_file.close()