---- UPDATE ---
该功能已被添加到主分支,我只是离开我的以前的回答仅供参考,如果您无法访问最新版本的对流层(即,如果您不克隆存储库)。你仍然可以在你的代码中使用简短的函数(第三选项),它仍然可以工作。
“标签”帮助类(来自对流层模块)不能生成ASG标签列表(键/值/传播),只有基本标签列表(键/值 - 例如EC2)。 您可以使用troposphere.autoscaling.Tags类,它会模仿最新的类,并增加“传播”属性。
您可以使用它像这样:
asg.Tags = autoscaling.Tags(Name = 'MyTagName', Version = '123456')
你所有的标签将有PropagateAtLaunch属性设置为“真”。如果你想有一个不同的PropagateAtLaunch财产,只是这样写:
asg.Tags = autoscaling.Tags(Name = 'MyTagName', Version = '123456',
NonPropagatedTag=('fail',False))
的NonPropagatedTag标签将不会传播和拥有的“失败”的值(惊喜!)。
以前的答案:
不能使用“标签”的辅助类(从对流层模块)来产生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帮助程序类,它采用3个参数:标记键,标记值,传播,而不是字典。你将不得不代码:
asg.Tags= [autoscaling.Tag('Name','MyTagName','true'),
autoscaling.Tag('Version','123456','true')]
,如果你没有太多的标签,或者只是用它在一个地方,那也无妨。但标签助手类非常好...
使用另一个辅助类来生成ASG特定标记列表。我只是做了对流层的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标签将不会传播和拥有的“失败”的值(惊喜!)。
您测试过以下吗?asg.Tags = Tags(Name =“MyTagName”,Version =“123456”,“PropagateAtLaunch”=“true”) –
看起来它会添加第三个列表元素'{“Key”:“PropogateAtLaunch”,“Value “:”真“}',不幸的是。 –