2015-08-25 3 views
0

Я использую пользовательские теги для своих экземпляров AWS. Я пытаюсь перечислить все экземпляры (запущенные и остановленные) в CSV-файле. Не будучи программистом, я искал и копировал/вставлял коды и шел со сценарием, который работает хорошо. Но я заметил, что если один тег отсутствует, скрипт выдает ошибку и останавливается прямо там. Если тег создан, но пуст, сценарий печатает пустое пространство, но если тег вообще не создается, сценарий просто останавливается. Например, если тег Владелец отсутствует, то он выдает сообщение об ошибке KeyError: 'Owner' и останавливается там. Мой скрипт вставлен ниже. Может кто-нибудь сообщить мне, какие изменения мне нужно сделать, чтобы, если тег не существует, скрипт выдает N/A вместо остановки.Boto выпускает экземпляры AWS без тегов

#!/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() 

ТИА sbasnet

ответ

0

Может быть что-то, как это будет делать?

Предупреждение: непроверенной

#!/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() 
+0

Я просто проверил его и он работает ... Спасибо так много. – sbasnet

+0

@sbasnet рад, что это сработало. Пожалуйста, отметьте ответ в качестве решения, если он это сделал (и повысьте :)) – varesa

Смежные вопросы