For循环中带有过滤器boto3的快照ID

问题描述 投票:0回答:2

我正在尝试将每个快照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传递到带有应用的过滤器的describe,以获取每个快照的标签

能够使用下面的函数解析并在主体中调用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'])

感谢您对约翰的帮助

python-3.x amazon-web-services aws-lambda boto3 boto
2个回答
1
投票

看来您的要求是:

  • 查找所有没有标签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'])

上面的代码将打印没有not标签为mytag=TRUE的任何快照的ID和说明。


0
投票

能够通过上面的函数解析并为每个快照调用for循环

© www.soinside.com 2019 - 2024. All rights reserved.