我正在尝试使用boto v2.32.0列出特定ASG上的标签
像这样简单的东西显然不起作用(特别是缺少过滤系统):import boto.ec2.autoscale
asg = boto.ec2.autoscale.connect_to_region('ap-southeast-2')
tags = asg.get_all_tags('asgname')
print tags
或:
asg = boto.ec2.autoscale.connect_to_region('ap-southeast-2')
group = asg.get_all_groups(names='asgname')
tags = asg.get_all_tags(group)
print tags
或:
asg = boto.ec2.autoscale.connect_to_region('ap-southeast-2')
group = asg.get_all_groups(names='asgname')
tags = group.get_all_tags()
print tags
未指定&{39; asgname
',它不会返回每个ASG。尽管文档中有关返回令牌以查看下一页的说明,但它似乎没有正确实现 - 尤其是当您每个ASG都有大量ASG和标签时。
尝试这样的事情基本上告诉我,令牌系统似乎已被打破。它不是"循环"通过所有ASG和标签返回"无":
asg = boto.ec2.autoscale.connect_to_region('ap-southeast-2')
nt = None
while ( True ):
tags = asg.get_all_tags(next_token=nt)
for t in tags:
if ( t.key == "MyTag" ):
print t.resource_id
print t.value
if ( tags.next_token == None ):
break
else:
nt = str(tags.next_token)
有没有人设法实现这一目标?
由于
答案 0 :(得分:1)
使用AutoScaling DescribeTags API调用在AWS中可以使用此功能,但遗憾的是,boto并未完全实现此调用。
您应该能够通过该API调用传递Filter以仅获取特定ASG的标记,但是如果您查看boto source code for get_all_tags()(v2.32.1),则过滤器未实施:
:type filters: dict
:param filters: The value of the filter type used
to identify the tags to be returned. NOT IMPLEMENTED YET.
(引自上面提到的源代码)。
答案 1 :(得分:0)
我最终通过创建一个使用亚马逊cli的工作来回答我自己的问题。由于自从我提出这一问题之日起就没有关于此问题的活动,我将此解决方案作为解决方案发布。
import os
import json
## bash command
awscli = "/usr/local/bin/aws autoscaling describe-tags --filters Name=auto-scaling-group,Values=" + str(asgname)
output = str()
# run it
cmd = os.popen(awscli,"r")
while 1:
# get tag lines
lines = cmd.readline()
if not lines: break
output += lines
# json.load to manipulate
tags = json.loads(output.replace('\n',''))