python – 使用对流层进行云形成,如何在标记中添加“在发布时传
我正在使用
python模块对流层在我的云形成模板中生成标签.当前脚本生成:
"Tags": [{"Key":"Name","Value":"MyTagName"},{"Key":"Version","Value":"123456"}] 但我需要生成 "Tags":[{"Key":"Name","Value":"MyTagName","PropagateAtLaunch":"true"},"Value":"123456","PropagateAtLaunch":"true"}] 适用的脚本部分是: asg = autoscaling.AutoScalingGroup("MyASG") asg.Tags = Tags(Name = "MyTagName",Version = "123456") t.add_resource(asg) 解决方法
—-更新—
该功能已添加到主分支中,我只是留下我以前的答案以供参考,以防您无法访问最新版本的对流层(即如果您没有克隆存储库).您仍然可以在代码中使用短函数(第3个选项),但它仍然有效. “标签”帮助类(来自对流层模块)不能生成ASG标签列表(键/值/传播),只能生成基本标签列表(键/值 – 例如EC2). 你可以像这样使用它: asg.Tags = autoscaling.Tags(Name = 'MyTagName',Version = '123456') 您的所有标记都将PropagateAtLaunch属性设置为“true”.如果你想要一个不同的PropagateAtLaunch属性,只需这样写: asg.Tags = autoscaling.Tags(Name = 'MyTagName',Version = '123456',NonPropagatedTag=('fail',False)) NonPropagatedTag标签不会传播(惊喜!)并且值为’fail’. 上一个答案: 您不能使用“标签”辅助类(来自对流层模块)来生成ASG标签列表(键/值/传播),只能使用基本标签列表(键/值).快速查看源代码将告诉您原因(https://github.com/cloudtools/troposphere/blob/master/troposphere/init.py) 它有三个选项: >长&困难的方式:ASG标签列表(在对流层)只是一个包含三个键的dicts的python列表:Name,Value和PropagateAtLaunch.所以你的代码看起来像: asg.Tags= [{'Key':'Name','Value':'MyTagName','PropagateAtLaunch':'true'},{'Key':'Version','Value':'123456','PropagateAtLaunch':'true'}] 是的,丑陋的. asg.Tags= [autoscaling.Tag('Name','MyTagName','true'),autoscaling.Tag('Version','123456','true')] 如果你没有很多标签,或者只是在一个地方使用它,那没关系.但是标签助手类太棒了…… 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',只需这样写:asg.Tags = TagsASG(Name = 'MyTagName',False)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |