Как имитировать фильтр AWS CLI EC2 в boto3 - PullRequest
0 голосов
/ 05 мая 2018

Я ищу способ имитации фильтра AWS CLI EC2 с помощью Boto3 скажем, я хочу перевести часть фильтров команды description-instances:

aws ec2 describe-instances --filters "Name=instance- 
type,Values=m1.small,t2.small"

в метод Boto3 description_instances:

response = client.describe_instances(
    Filters=[
        {
            'Name': 'instance- type',
            'Values': [
                'm1.small','t2.small',
            ]
        }
      ]
    )

Так что в основном то, что я спрашиваю, что хорошо, почему в python взять строку:

"Name=instance-type,Values=m1.small,t2.small"

и преобразовать его в:

[
  {
     'Name': 'instance- type',
     'Values': [
       'm1.small','t2.small',
     ]
  }
]

чтобы я мог использовать его в качестве параметра фильтра в методе borib3 decribe_instances.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

для случаев, когда фильтр состоит из нескольких частей; поскольку «Имя» и «Значения» являются специфическими для этого фильтра

def parse_filter_field(filter_str):
    filters = []
    regex = re.compile(r'name=([\w\d_:.-]+),values=([/\w\d_,.\*]+)', flags=re.I)
    for f in filter_str.split(';'):
        match = regex.match(f)
        if match is None:
            print 'could not parse filter: %s' % (f, )
            continue

        filters.append({
            'Name' : match.group(1),
            'Values' : match.group(2).split(',')
            })

return filters
0 голосов
/ 07 мая 2018

Следующие данные будут соответствовать точному указанному формату, но возникнут проблемы, если формат слишком велик:

import re

filter='Name=instance-type,Values=m1.small,t2.small'

match = re.search('(.*)=(.*),(.*)=(.*)', filter)

f = {match.group(1) : match.group(2), match.group(3) : match.group(4).split(',')}

# f is a normal Python dictionary
print (f)

# Or, convert it to JSON
import json
print (json.dumps(f))

Вывод:

{'Values': ['m1.small', 't2.small'], 'Name': 'instance-type'}
{"Values": ["m1.small", "t2.small"], "Name": "instance-type"}

Порядок не имеет значения для словаря. Вы также можете заключить вывод в '[]', но это делает его не совсем JSON.

Отличный сайт для тестирования регулярных выражений Python: Pythex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...