2016-06-01 5 views
0

Ich habe ein kleines Skript zurückzukehren, wie folgt:Wie die ganze Liste von einer Python-Funktion

import boto3 
ACCESS_KEY= "XXXXXXXXXXXXX" 
SECRET_KEY= "XXXXXXXXXXXX" 
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'] 
for region in regions: 
    client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,) 
    addresses_dict = client.describe_addresses() 
    for eip_dict in addresses_dict['Addresses']: 
    print eip_dict['PublicIp'] 

Dieser Code funktioniert gut und druckt die Liste aller EIP aus allen Region, jetzt versuche ich das zu verwenden, obiger Code in meinen anderen Skriptfunktionen wie mit:

def gather_public_ip(): 
    ACCESS_KEY = config.get('aws','access_key') 
    SECRET_KEY = config.get('aws','secret_key') 
    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'] 
    all_EIP = [] 
    for region in regions: 
     client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,) 
     addresses_dict = client.describe_addresses() 
     for eip_dict in addresses_dict['Addresses']: 
      print eip_dict['PublicIp'] 
      all_EIP.append(eip_dict['PublicIp']) 
      return all_EIP 

Aber das bricht nach dem 1. Iteration nur (es nur druckt einen IP) und kehrt nicht die ganze Liste an Anrufer, nenne ich die obige Funktion von __main__ wie folgt:

 net_range = gather_public_ip() 
     r = s.run(net_range) 
     s.save() # save 

Grundsätzlich Ich möchte run() die Liste der zurückgegebenen IP-Adressen zu übergeben. Kann mir jemand helfen ?

Antwort

3

Sie geben Ihre all_EIP in der ersten Iteration der geschachtelten for-Schleife zurück. Ziehen Sie die Rückgabe zurück, so dass sie nach der äußeren für ausgeführt wird, und Sie sollten alles haben, was angehängt werden soll.

def gather_public_ip(): 
    ACCESS_KEY = config.get('aws','access_key') 
    SECRET_KEY = config.get('aws','secret_key') 
    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'] 
    all_EIP = [] 
    for region in regions: 
     client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,) 
     addresses_dict = client.describe_addresses() 
     for eip_dict in addresses_dict['Addresses']: 
      print eip_dict['PublicIp'] 
      all_EIP.append(eip_dict['PublicIp']) 
    return all_EIP 
+1

ahh, dumm von mir, und nur noch eine Frage, es zu verfolgen, wie Sie ich bin Kommissionierung bis die Anmeldeinformationen aus einer Konfigurationsdatei finden kann, wird es auch für 'Anbaugebiete arbeiten, – PythonFreak

+0

Die' ConfigParser' Modul hat keine eingebaute Möglichkeit, die Eingabe/Ausgabe von Listen zu handhaben. Sie müssen Ihre eigenen rollen, aber das ist einfach genug. Zum Beispiel mit einem Trennzeichen zwischen Regionen und dann nach dem "Get" -Teilen. – renemilk

+0

können Sie mir sagen, wie bekomme ich die IPs, die gerade eine laufende Instanz haben ?? – PythonFreak

Verwandte Themen