AWS boto v2.32.0 - 列出ASG的标签

时间:2014-09-23 05:12:39

标签: amazon-web-services boto autoscaling

我正在尝试使用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)

有没有人设法实现这一目标?

由于

2 个答案:

答案 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',''))