在 For 循环中使用过滤器 boto3 的快照 ID
snapshot id with filter boto3 within a For Loop
我正在尝试将每个快照 ID 传递到 for 循环并打印但无济于事,每次我都可以传递它只描述第一个快照并描述打印所有标签。
for snapshot in get_my_snapshots():
print ('Snapshot ID is equal to', snapshot['id'])
my_tag = ec2.describe_snapshots(Filters=[{'Name': 'tag:mytag', 'Values': ['TRUE']}])['Snapshots']
print (my_tag)
print('{:22} {:22}'.format(
snapshot['id'],
snapshot['description'],
))
我尝试了多种组合来从函数中传入快照 ID,但如下所示无济于事。
for snapshot in get_my_snapshots():
print ('Snapshot ID is equal to', snapshot['id'])
my_tag = ec2.describe_snapshots(SnapshotId=snapshot['id'], Filters=[{'Name': 'tag:mytag', 'Values': ['TRUE']}])['Snapshots']
print (my_tag)
print('{:22} {:22}'.format(
snapshot['id'],
snapshot['description'],
))
如何将快照 ID 传递到应用过滤器的描述中以获取每个快照的标签
能够使用下面的函数解决并在主体中调用 for 循环
def get_tag_snapshots():
'''
Get all tags.
'''
global region_tags
ec2 = boto3.client('ec2', region_name=region_tags)
snap_tag = ec2.describe_snapshots(Filters=[{'Name': 'tag:mytag', 'Values': ['TRUE']}])
print ('Snap Tag!!', snap_tag)
ls_snaptags=[]
for snapshot in snap_tag['Snapshots']:
(ls_snaptags.append(snapshot['SnapshotId']))
snap_tag_id = snapshot['SnapshotId']
yield {
'snap_id': snapshot['SnapshotId'],
}
print ("Snapshot with mytag = True !! ",snapshot['SnapshotId'])
感谢约翰的帮助
看来您的要求是:
- 查找所有没有标签
mytag=TRUE
的快照
最简单的方法是使用 if
语句来检查与快照关联的标签:
import boto3
ec2_client = boto3.client('ec2')
for snapshot in ec2_client.describe_snapshots(OwnerIds=['self'])['Snapshots']:
if 'Tags' in snapshot:
# Skip if mytag=TRUE
if [tag for tag in snapshot['Tags'] if tag['Key'] == 'mytag' and tag['Value'] == 'TRUE']:
continue
print(snapshot['SnapshotId'])
print(snapshot['Description'])
以上代码将打印 不 具有 mytag=TRUE
.
标签的任何快照的 ID 和描述
能够使用上面的函数解析并在每个快照中调用 for 循环
我正在尝试将每个快照 ID 传递到 for 循环并打印但无济于事,每次我都可以传递它只描述第一个快照并描述打印所有标签。
for snapshot in get_my_snapshots():
print ('Snapshot ID is equal to', snapshot['id'])
my_tag = ec2.describe_snapshots(Filters=[{'Name': 'tag:mytag', 'Values': ['TRUE']}])['Snapshots']
print (my_tag)
print('{:22} {:22}'.format(
snapshot['id'],
snapshot['description'],
))
我尝试了多种组合来从函数中传入快照 ID,但如下所示无济于事。
for snapshot in get_my_snapshots():
print ('Snapshot ID is equal to', snapshot['id'])
my_tag = ec2.describe_snapshots(SnapshotId=snapshot['id'], Filters=[{'Name': 'tag:mytag', 'Values': ['TRUE']}])['Snapshots']
print (my_tag)
print('{:22} {:22}'.format(
snapshot['id'],
snapshot['description'],
))
如何将快照 ID 传递到应用过滤器的描述中以获取每个快照的标签
能够使用下面的函数解决并在主体中调用 for 循环
def get_tag_snapshots():
'''
Get all tags.
'''
global region_tags
ec2 = boto3.client('ec2', region_name=region_tags)
snap_tag = ec2.describe_snapshots(Filters=[{'Name': 'tag:mytag', 'Values': ['TRUE']}])
print ('Snap Tag!!', snap_tag)
ls_snaptags=[]
for snapshot in snap_tag['Snapshots']:
(ls_snaptags.append(snapshot['SnapshotId']))
snap_tag_id = snapshot['SnapshotId']
yield {
'snap_id': snapshot['SnapshotId'],
}
print ("Snapshot with mytag = True !! ",snapshot['SnapshotId'])
感谢约翰的帮助
看来您的要求是:
- 查找所有没有标签
mytag=TRUE
的快照
最简单的方法是使用 if
语句来检查与快照关联的标签:
import boto3
ec2_client = boto3.client('ec2')
for snapshot in ec2_client.describe_snapshots(OwnerIds=['self'])['Snapshots']:
if 'Tags' in snapshot:
# Skip if mytag=TRUE
if [tag for tag in snapshot['Tags'] if tag['Key'] == 'mytag' and tag['Value'] == 'TRUE']:
continue
print(snapshot['SnapshotId'])
print(snapshot['Description'])
以上代码将打印 不 具有 mytag=TRUE
.
能够使用上面的函数解析并在每个快照中调用 for 循环