我使用标签来跟踪我的EC2实例,例如(项目,环境)。我有一个用例,其中我只需要过滤属于特定项目和特定环境的那些实例。
当我将过滤器与boto一起使用并传递这两个值时,我得到的结果是对过滤器执行“或”运算而不是“与”运算,因此我收到了属于不同项目但环境相同的实例的列表。
现在,我可以使用两个列表,然后比较每个列表中的实例并获得所需的实例集,但是还有更好的方法吗?
这是我在做什么:
conn = ec2.EC2Connection('us-east-1',aws_access_key_id='XXX',aws_secret_access_key='YYY')
reservations = conn.get_all_instances(filters={"tag-key":"project","tag-value":<project-name>,"tag-key":"env","tag-value":<env-name>})
instances = [i for r in reservations for i in r.instances]
现在,我要获取的实例列表将提供来自指定项目的所有实例(与环境无关)以及来自指定环境的所有实例(与项目无关)。
您可以使用tag:key=value
语法在过滤器上执行AND搜索。
import boto.ec2
conn = boto.ec2.connect_to_region('us-east-1',aws_access_key_id='xx', aws_secret_access_key='xx')
reservations = conn.get_all_instances(filters={"tag:Name" : "myName", "tag:Project" : "B"})
instances = [i for r in reservations for i in r.instances]
print instances
有关详细信息,请参见EC2 API。http: //docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstances.html
您使用的语法存在的问题是Python字典具有唯一键,因此第二个tag-key
条目将覆盖第一个条目:-(
塞布
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句