加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用对流层进行云形成,如何在标记中添加“在发布时传

发布时间:2020-12-20 13:46:41 所属栏目:Python 来源:网络整理
导读:我正在使用 python模块对流层在我的云形成模板中生成标签.当前脚本生成: "Tags": [{"Key":"Name","Value":"MyTagName"},{"Key":"Version","Value":"123456"}] 但我需要生成 "Tags":[{"Key":"Name","Value":"MyTagName","PropagateAtLaunch":"true"},"Value"
我正在使用 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).
你可以使用troposphere.autoscaling.Tags类来模仿最新的,添加了“propagate”属性.

你可以像这样使用它:

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'}]

是的,丑陋的.
>只是更短一点:你可以使用autoscaling.Tag助手类而不是dicts,它有3个参数:标记键,标记值,传播.你必须编码:

asg.Tags= [autoscaling.Tag('Name','MyTagName','true'),autoscaling.Tag('Version','123456','true')]

如果你没有很多标签,或者只是在一个地方使用它,那没关系.但是标签助手类太棒了……
>使用另一个辅助类,生成ASG特定的标记列表.我刚刚在troposphere github存储库上做了一个pull请求,只需添加一点:

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))

NonPropagatedTag标签不会传播(惊喜!)并且值为’fail’.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读