----更新---
该功能已添加到主分支,我只是留下我之前的答案以供参考,以防您无法访问最新版本的对流层(即,如果您不克隆存储库)。您仍然可以在代码中使用 short 函数(第三个选项),它仍然可以工作。
“标签”帮助类(来自对流层模块)无法生成 ASG 标签列表(键/值/传播),只能生成基本标签列表(键/值 - 例如用于 EC2)。您可以改用troposphere.autoscaling.Tags类,它模仿最新的,添加了“传播”属性。
你可以像这样使用它:
asg.Tags = autoscaling.Tags(Name = 'MyTagName', Version = '123456')
您的所有标签都将 PropagateAtLaunch 属性设置为“true”。如果你想要一个不同的 PropagateAtLaunch 属性,只需这样写:
asg.Tags = autoscaling.Tags(Name = 'MyTagName', Version = '123456',
NonPropagatedTag=('fail',False))
NonPropagatedTag 标记将不会被传播(惊喜!)并且具有“失败”值。
上一个答案:
您不能使用“Tags”助手类(来自对流层模块)生成 ASG 标签列表(键/值/传播),只能生成基本标签列表(键/值)。快速查看源代码会告诉您原因(https://github.com/cloudtools/troposphere/blob/master/troposphere/init.py )
它为您提供三个选择:
漫长而艰难的方式:ASG 标记列表(在对流层中)只是具有三个键的 python 字典列表:名称、值和 PropagateAtLaunch。所以你的代码看起来像:
asg.Tags= [{'Key':'Name','Value':'MyTagName','PropagateAtLaunch':'true'},
{'Key':'Version','Value':'123456','PropagateAtLaunch':'true'}]
是的,丑陋。
只是更短一点:您可以使用 autoscaling.Tag 辅助类来代替 dicts,它接受 3 个参数:标签键、标签值、传播。你将不得不编码:
asg.Tags= [autoscaling.Tag('Name','MyTagName','true'),
autoscaling.Tag('Version','123456','true')]
如果你没有很多标签,或者只是在一个地方使用它,那没关系。但是标签助手类非常好......
使用另一个助手类,生成 ASG 特定的标签列表。我刚刚在 troposphere github 存储库上做了一个拉取请求,用于这个小补充:
class TagsASG(troposphere.AWSHelperFn):
defaultPropagateAtLaunch=True
manyType=[type([]), type(())]
def __init__(self, **kwargs):
self.tags = []
for k, v in sorted(kwargs.iteritems()):
if type(v) in self.manyType:
propagate=str(v[1]).lower()
v=v[0]
else:
propagate=str(self.defaultPropagateAtLaunch).lower()
self.tags.append({
'Key': k,
'Value': v,
'PropagateAtLaunch':propagate,
})
def JSONrepr(self):
return self.tags
现在,您可以像这样使用它:
asg.Tags = TagsASG(Name = 'MyTagName', Version = '123456')
您的所有标签都将 PropagateAtLaunch 属性设置为“true”。如果你想要一个不同的 PropagateAtLaunch 属性,只需这样写:
asg.Tags = TagsASG(Name = 'MyTagName', Version = '123456',
NonPropagatedTag=('fail',False))
NonPropagatedTag 标记将不会被传播(惊喜!)并且具有“失败”值。