我需要检查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)'
)
答案 0 :(得分:0)
我在一位同事的帮助下自己弄清楚了这一点,不得不熟悉正则表达式,并且发现^代表“ not”。我还需要在函数顶部附近添加“ import re”,以导入regualr表达式。新代码如下。这不包括名称以“ 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)'
)