应该是一件非常简单的事情,但我无法在任何地方找到线索。我想运行get_all_dhcp_options(),但设置过滤器,以便只返回与某个域名匹配的过滤器。
答案 0 :(得分:3)
如果有人有更好的方法,请告诉我。
我理解直接得到答案,因为@garnaat做的很简单,但是如何获得过滤器密钥并不是那么直接。
我在这里做的是轻松找出键/值的指令。这是在boto中查找任何键的一般方法,不仅是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]
正确获得结果后,您可以在代码中添加上述步骤。
祝你好运。答案 1 :(得分: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,它会直接从服务文档中获取帮助信息,因此它会列出可用的过滤器。
要查找支持哪些过滤器,您必须知道boto中的get_all_*
方法调用映射到EC2中的Describe*
API调用,而这些调用又在AWSCLI中以{{{ 1}}命令。所以:
describe-*
将显示API调用的所有帮助,包括支持的过滤器。它是获取信息的一种迂回方式,但它比在API文档中查找更好。