MISE À JOUR:Boto exemple .__ dict __ [ 'tags'] [ 'nom'] d'émission de sortie
Je l'ai fait ce qui est suggéré ci-dessous, cependant, je recevais toujours un KeyError: 'Nom' dans la sortie, même si la sortie était correcte.
Ce fut la sortie:
us-west-1 EC2Connection:
ec2.us-west-1.amazonaws.com
Showing all of your current instances
Proxy-44-1000-Enrollments
Proxy-45-1000-Enrollments
Proxy-48-1000-Enrollments
Proxy-49-1000-Enrollments
Proxy-59-1000-Enrollments
Proxy-67-1000-Enrollments
Traceback (most recent call last): File "/Users/xxxxx/xxxx/boto/instanceid.py",
line 43, in <module> print "\t%s" % (instance.tags['Name']) if instance.state ==
'running' else instance.state KeyError: 'Name'
Question initiale:
Je suis en train de vider une liste de ID d'instance ainsi que leur étiquette "Nom" de AWS utilisant boto. J'ai trouvé en ligne une méthode que l'on peut attacher à l'objet instance, appelée __dict__
, qui semblait bien fonctionner, cependant, je voulais sortir la balise "name" seulement en utilisant cette méthode, mais je continue d'obtenir une erreur "Key Error : 'Nom' "
Fondamentalement, ce code fonctionne:
# Creating connection object to EC2
conn = boto.connect_ec2()
regions = boto.ec2.regions()
# the 5 element in the array is "us-west-1" and setting the object to connect
us = regions[5]
print us.name
conn_us = us.connect()
print conn_us
filters = {'key-name' : 'misc-key'}
all_inst = conn_us.get_all_instances(filters=filters)
print "Showing all of your current instances"
for res in all_inst:
# each reservation have a instance:
for instance in res.instances:
print "\t%s: \t%s" % (instance.id, instance.__dict__['tags'])
la sortie est hoky tho:
us-west-1
EC2Connection:ec2.us-west-1.amazonaws.com
Showing all of your current instances
i-xxxxxxxx: {u'Name': u'Proxy-xx-1000-Enrollments'}
i-xxxxxxxx: {u'Name': u'Proxy-xx-1000-Enrollments'}
i-xxxxxxxx: {u'Name': u'Proxy-xx-1000-Enrollments'}
i-xxxxxxxx: {u'Name': u'Proxy-xx-1000-Enrollments'}
i-xxxxxxxx: {u'Name': u'Proxy-xx-1000-Enrollments'}
Quand je fais un changement à la méthode __dict__
à "tirer" out" name "seulement, cela fonctionne (ou semble fonctionner, mais génère une erreur:
Voici le changement de code:
print "\t%s: \t%s" % (instance.id, instance.__dict__['tags']['Name'])
est ici la sortie:
us-west-1
EC2Connection:ec2.us-west-1.amazonaws.com
Showing all of your current instances
i-xxxxxxxx: Proxy-xx-1000-Enrollments
i-xxxxxxxx: Proxy-xx-1000-Enrollments
i-xxxxxxxx: Proxy-xx-1000-Enrollments
i-xxxxxxxx: Proxy-xx-1000-Enrollments
i-xxxxxxxx: Proxy-xx-1000-Enrollments
i-xxxxxxxx: Proxy-xx-1000-Enrollments
Traceback (most recent call last):
File "/Users/xxxxxx/xxx.xxx/boto/instanceid.py", line 43, in <module>
print "\t%s: \t%s" % (instance.id, instance.__dict__['tags']["Name"])
KeyError: 'Name'
Je préfère cette sortie, SANS l'erreur - quelqu'un peut me dire ce que je fais mal ici?
Merci
Merci pour la réponse, vraiment apprécier. Cependant, lorsque j'utilise votre syntaxe, je reçois toujours le "KeyError" lors de l'exécution du code mis à jour: –
'us-west-1 EC2Connection: ec2.us-west-1.amazonaws.com Affichage de tout votre courant instances \t Proxy-44-1000 enrôle \t Proxy-45-1000 enrôle \t Proxy-48-1000 enrôle \t Proxy-49-1000 enrôle \t Proxy-59-1000 enrôle \t proxy- 67-1000-Inscriptions \t Proxy-70-1000-Enrollments \t Proxy-71-1000-Enrollments \t Proxy-73-1000 enrôle retraçage (le plus récent appel dernier): Fichier "/Users/xxxxx/xxxx/boto/instanceid.py", ligne 43, en print "\ t% s" % (par exemple .tags ['Name']) si instance.state == 'running' else instance.state KeyError: 'Nom' –