2015-09-18 2 views
1

Должно быть, довольно простая вещь, но я не мог найти подсказки нигде. Я хочу запустить get_all_dhcp_options(), но установить фильтры так, чтобы возвращались только те, которые соответствуют определенному доменному имени.boto VPC get_all_dhcp_options() фильтр по доменному имени

ответ

2

Это должно работать для вас:

import boto.vpc 
c = boto.vpc.connect_to_region('us-west-2') # or whatever 
c.get_all_dhcp_options(filters={'key': 'domain-name', 'value': 'us-west-2.compute.internal'}) 

Очевидно, что использование любого домен имеет смысл в вашей ситуации.

Определение того, какой ключ/значения фильтра поддерживается данным вызовом API, является еще одной проблемой. К сожалению, boto не предоставляет способ сделать это главным образом потому, что API не предоставляет эту информацию. Однако, если у вас есть AWSCLI, у него есть справочная информация, которая поступает непосредственно из сервисной документации, поэтому она перечисляет доступные фильтры.

Чтобы найти то, что фильтры поддерживаются вы должны знать, что метод get_all_* заезжает Boto карты к Describe* API вызовов в EC2 и те, в свою очередь, доступны в качестве AWSCLI describe-* команд. Итак:

aws ec2 describe-dhcp-options help 

будет отображать всю помощь для вызова API, включая поддерживаемые фильтры. Его окольный способ получить информацию, но лучше, чем искать ее в документах API.

+0

Спасибо, я видел обновления. На самом деле, после запуска aws с помощью команды help, я не могу получить полный список ключей (например, в справочной системе нет ключа «ntp-servers»). Я думаю, что лучше запустить команду 'aws ec2 describe-dhcp-options'. Из вывода я могу четко понимать структуру ключа/значения. – BMW

3

Если у кого-то есть лучший способ, пожалуйста, дайте мне знать.

Я понимаю, чтобы получить ответ непосредственно как @garnaat сделал просто, но на как получить фильтр ключ не то, что прямой.

Что я здесь сделал, это инструкция, чтобы легко узнать ключ/значение. Это общий способ для поиска каких-либо клавиш в Бото, не только VPC, то же самое для EC2, s3 и т.д.

$ python 

>>> import boto.vpc 
>>> c = boto.vpc.connect_to_region('us-west-2') # or whatever 
>>> c.get_all_dhcp_options() 
[DhcpOptions:dopt-12dc23d1, DhcpOptions:dopt-426e82c7] 
>>> for dhcp in c.get_all_dhcp_options(): 
... print dir(dhcp) 
... 
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add_tag', 'add_tags', 'connection', 'endElement', 'id', 'item', 'options', 'region', 'remove_tag', 'remove_tags', 'startElement', 'tags'] 

Это имеет смысл, что доменное имя должно быть в options, но вы можете проверить его с помощью логина aws, нажмите VPC =>DHCP Options Sets, доменное имя находится в столбце options. Так продолжать отладку:

>>> for dhcp in c.get_all_dhcp_options(): 
... print dhcp.options 
... 
{u'domain-name': [u'us-west-2.compute.internal'], u'domain-name-servers': [u'AmazonProvidedDNS']} 
{u'domain-name': [u'abc.example.com xyz.example.com'], u'domain-name-servers': [u'10.0.0.1', u' 10.0.0.2'], u'ntp-servers': [u'10.0.0.1', u' 10.0.0.2']} 
... 

Итак, теперь вы получите ключ, который domain-name, и вы также знаете, другие ключи domain-name-servers, ntp-servers. Тогда вы должны уверенно поставить фильтр сейчас.

>>> c.get_all_dhcp_options(filters={'key': 'domain-name', 'value': 'us-west-2.compute.internal'}) 
[DhcpOptions:dopt-426e82c7] 

После того как вы получите результат правильно, вы можете добавить выше шаги в свои коды.

Удачи.

+2

Существует общая проблема определения того, какие фильтры поддерживаются определенным вызовом API. Бото не помогает вам в этом. В прошлом я прибегал к просмотру документов EC2 API. Теперь я обычно использую команду '' help'' в AWSCLI, чтобы узнать. – garnaat

+0

Спасибо @garnaat. Это работа.Но в boto, кажется, нет простого способа перечислить ключи. Кстати, можно ли обновить свой ответ и дать подробные инструкции о том, как получить ключ с помощью «AWSCLI»? – BMW

+0

Правильно, нет способа получить это в boto. Это потому, что нет API, который возвращает эту информацию. Я отредактировал ответ ниже, чтобы получить дополнительную информацию о получении документов с фильтрами через AWSCLI. – garnaat

Смежные вопросы