boto VPC get_all_dhcp_options()按域名过滤

时间:2015-09-18 00:44:31

标签: boto amazon-vpc

应该是一件非常简单的事情,但我无法在任何地方找到线索。我想运行get_all_dhcp_options(),但设置过滤器,以便只返回与某个域名匹配的过滤器。

2 个答案:

答案 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-serversntp-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文档中查找更好。