首页 > 解决方案 > 检查 EC2 卷的多个条件

问题描述

我需要检查 EC2 卷上的多个条件。

在第 2 行,它之前读取了 'if vol.state == 'available':' 并且这有效。我现在需要排除任何带有“名称”标签且值以“CloudEndure”开头的卷。我添加了代码,所以第 2 行现在读取 'if vol.state == 'available' 而不是 [{'Name':'tag:Name', 'Values':['CloudEndure*']}]:' 并且它失败了语法错误。

    for vol in ec2.volumes.all():
        if vol.state == 'available' and not [{'Name':'tag:Name', 'Values':['CloudEndure*']}]:
            vid=vol.id
            v=ec2.Volume(vol.id)
            response = table.query(
            KeyConditionExpression=Key('volID').eq(vid),
            )
            if response['Count'] == 0: #volume not being tracked in table
                try:
                    response = table.put_item(
                        Item={
                            'volID': vid,
                            'ebsDaysToExpire': 7,
                            'snapshotStatus': 'incomplete',
                            'snapshotDate': 'incomplete',
                            'lifecycleStatus': 'start_7',
                            'snapshotID': 'incomplete',
                            'snapshotDaysToExpire': '30'
                        },
                        ConditionExpression='attribute_not_exists(volID)'
                        )

标签: python-3.xaws-lambdaboto3

解决方案


我在同事的帮助下自己解决了这个问题,必须熟悉正则表达式,我发现 ^ 代表“不”。我还需要在函数顶部附近添加“import re”来导入正则表达式。新代码如下。这不包括名称以“CloudEndure”开头的卷,这就是我所追求的。

    for vol in ec2.volumes.all():
        cloudendure=False
        for tag in vol.tags:
            if tag['Key'] == 'Name' and re.search("^CloudEndure.*",tag['Value']):
               cloudendure=True
               #print(tag)
        if vol.state == 'available' and cloudendure==False:
            vid=vol.id
            v=ec2.Volume(vol.id)
            response = table.query(
            KeyConditionExpression=Key('volID').eq(vid),
            )
            if response['Count'] == 0: #volume not being tracked in table
                try:
                    response = table.put_item(
                        Item={
                            'volID': vid,
                            'ebsDaysToExpire': 7,
                            'snapshotStatus': 'incomplete',
                            'snapshotDate': 'incomplete',
                            'lifecycleStatus': 'start_7',
                            'snapshotID': 'incomplete',
                            'snapshotDaysToExpire': '30'
                        },
                        ConditionExpression='attribute_not_exists(volID)'
                        )

推荐阅读