2016-06-17 4 views
0

Я написал код, который извлекает все запущенные общедоступные IP-адреса из AWS. Это возвращает данные в форме dict. Код работает следующим образом:Мне нужно создать список, извлекая информацию из файла dict

for region in regions: 
    instance_information = {} 
    ip_dict = {} 
    client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,) 
    addresses_dict = client.describe_addresses().get('Addresses') 

    for address in addresses_dict: 

     if address.get('InstanceId'): 
      instance_information[address['InstanceId']] = [address.get('PublicIp')] 
     # print instance_information 

    dex_dict = client.describe_tags().get('Tags') 
    for dex in dex_dict: 
     if instance_information.get(dex['ResourceId']): 
      instance_information[dex['ResourceId']].append(dex.get('Value')) 
    for instance in instance_information: 

     if len(instance_information[instance]) == 2: 
      ip_dict[instance_information[instance][0]] = instance_information[instance][1] 
     else: 
      ip_dict[instance_information[instance][0]] = '' 
    print (json.dumps(instance_information,indent=4)) 
    print type(instance_information) 

Это дает результат в виде:

{ 
    "i-cqa1ea32": [ 
     "22.40.13.171", 
     "Prod LB", 
     "pdx-ms-prod--lb01" 
    ], 
    "i-b86adf671": [ 
     "12.6.1.3", 
     "pdx-trial-LBi", 
     "HAProxy Server", 
     "us-west-2", 
     "pdx-cloud-trial", 
     "subnet-d8e1af", 
     "us-west-2b" 
    ], 
    "i-47dabsa1": [ 
     "12.5.124.146", 
     "SDL Exclusive LB", 
     "pdx01-ms-prod-sdl-lb02" 
    ], 
    . 
    . 
    . 

Теперь это типа dict, мне нужно, чтобы извлечь IP, имя тега и региона, поэтому в основном отображение из приведенных выше данных, как

IP , Tag Name, Region 

например:

['12.1.1.1','pdx-dev-server','us,west-1'] 
['12.1.1.3','pdx-dev-server1','ap-southeast-1'] 
.. 
.. 

Но некоторые из объектов dict не имеют области и т. Д. Как я могу создать list из вышеуказанных данных, и мне нужно фактически передать (вернуть) IP-адреса другому коду. Пожалуйста ПОМОГИТЕ

+1

[ 'dict.items'] (https://docs.python.org/3/library/stdtypes.html#dict.items), вы должны начать. Я вижу, что вы используете python 2, так что это будет список пар '(key, value)'. Используйте 'dict.iteritems', если вы хотите перебрать их и выполнить извлечение данных. –

+0

, пожалуйста, укажите пример того, как должен выглядеть желаемый результат. Что такое имя тега, например? –

+0

@ Ev.Kounis, Обновлено в вопросе, обратите внимание, что мне нужно передать IP-адрес другой функции также – PythonFreak

ответ

0

Если я [0] действительно IP, я [1] является Tag и я [3] является область, вы можете использовать эту функцию:

def dict_to_list(dict_in): 
    ip_list = [i[0] for i in dict_in.values()] 
    tag_list = [i[1] for i in dict_in.values()] 
    region_list = [] 
    for i in dict_in.values(): 
     try: 
      region_list.append(i[3]) 
     except: 
      region_list.append("") 
    combined_result = list(zip(ip_list, tag_list, region_list)) 
    return combined_result 
Смежные вопросы