2016-05-10 3 views
1

J'essayais d'exécuter un script python de la manière suivante: python script.py -env - role pour récupérer des instances sur des valeurs d'environnement et de rôle spécifiées. Voici mon script:Script Python pour répertorier les instances en fonction des valeurs de balises personnalisées transmises lors de l'exécution du script

import argparse 
    import boto.ec2 

    AWS_ACCESS_KEY_ID = '<xxxxxx>' 
    AWS_SECRET_ACCESS_KEY = '<xxxxx>' 
    ec2conn = boto.ec2.connection.EC2Connection(AWS_ACCESS_KEY_ID,   AWS_SECRET_ACCESS_KEY) 

    env = '' 
    role = '' 

    def get_ec2_instances(): 
    regions = ['us-east-1','us-west-1','us-west-2','eu-west-1','sa-east-1', 
       'ap-southeast-1','ap-southeast-2','ap-northeast-1'] 
    parser = argparse.ArgumentParser() 
    parser.add_argument('env', help='tag:environment'); 
    parser.add_argument('role', help='tag:role'); 
    args = parser.parse_args() 
    global env 
    global role 
    env = args.env 
    role = args.role 

    reservations = ec2conn.get_all_instances(filters={"tag:environment" : "env","tag:role" : "role"}) 
    #reservations = ec2conn.get_all_instances() 
    inst = [i for r in reservations for i in r.instances] 
    for i in inst: 
     print "%s" % (i.tags['Name']) 

    if __name__ =='__get_ec2_instances__':get_ec2_instances() 

Son jeter aucune erreur et aucun résultat ..

+0

'liste inst' est probablement vide ... – mvelay

+0

Et vous avez une erreur d'indentation, de sorte que la dernière déclaration' if' n'a pas été exécuté. –

+0

Correction d'une erreur d'indentation qui ne fonctionne toujours pas – Titto

Répondre

0

Ceci est typique de codage culte de la cargaison que vous ne comprenez pas ce que vous copiez, en particulier la partie argparse, la nommer partie, même la partie suivante. Aussi boto est obsolète! boto est obsolète! boto est obsolète! Utilisez boto3.

import argparse 
import boto3 

def get_ec2_instances(Env,Role): 
    ec2 = boto3.client("ec2") 
    reservations = ec2.describe_instances(Filters= 
      [{ 
       "Name": "tag:environment", 
       "Values" : [Env], 
      },{ 
       "Name": "tag:role", 
       "Values" : [Role] 
      }]) 
    # following for diagnostic purposes 
    # reservations = ec2.describe_instances() 
    for reservation in reservations["Reservations"] : 
     for instance in reservation["Instances"]: 
      print "instance {} : Name:{} ".format(instance["InstanceId"], instance["Tags"][0]['Value']) 


if __name__ == '__main__': 
    parser = argparse.ArgumentParser() 
    parser.add_argument('env', default="environment", help='value for tag:environment'); 
    parser.add_argument('role', default="role", help='value for tag:role'); 
    args = parser.parse_args() 

    get_ec2_isntance(args.env, args.role) 

filters is one of the poorly documented boto3 "magic"

+0

Toujours une erreur "Type invalide pour le paramètre Filtres, valeur: {'tag: rôle': 'es', 'tag: environnement': 'qa'}, type: , types valides: , " – Titto