python-3.x - 检查 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)'
)
解决方案
我在同事的帮助下自己解决了这个问题,必须熟悉正则表达式,我发现 ^ 代表“不”。我还需要在函数顶部附近添加“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)'
)
推荐阅读
- reactjs - 将 TypeScript 模块从本地模块导入 React 应用程序
- node.js - 从另一台计算机发送 https 请求 nodejs express
- javascript - 我们如何在 JavaScript 中非常嵌套的数组中获取递归无法获取的键?
- javascript - 在 Javascript 中的 LinkedList 原型中实现 addInPos 方法
- c++ - 如何处理sqlite准备语句中的空值
- python - Webdriver Selenium - 打开和关闭 URL 循环
- swift - Swift Decodable - 如何解码经过 base64 编码的嵌套 JSON
- r - 数字输入在 Shiny 中响应太快
- c# - 无法更新 XAML TextBlock 文本绑定
- c - 如何设计一个断电安全的 RTC 时间开关?