【问题标题】:snapshot id with filter boto3 within a For LoopFor 循环中带有过滤器 boto3 的快照 id
【发布时间】:2020-05-06 10:43:40
【问题描述】:

我试图将每个快照 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'])

感谢约翰的帮助

【问题讨论】:

  • 什么是get_my_snapshots()?您可以编辑您的问题以显示它返回的示例吗?
  • 为什么代码指定 both SnapshotId and 过滤器?快照 ID 是唯一的,因此足以检索快照的详细信息。如果快照没有mytag=TRUE,它将不返回任何内容。如果您想“获取每个快照的标签”,那么 不要 指定过滤器。将返回所有标签。
  • 我希望排除 mytag=TRUE 的快照。 mu 理解是 Filters 参数仅用于包含,我正在查看 for 循环中的过滤但在标签查找时遇到问题,只看到'Description','OwnerId','SnapshotId''StartTime'

标签: python-3.x amazon-web-services aws-lambda boto3 boto


【解决方案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'])

以上代码将打印标签为mytag=TRUE的任何快照的ID和描述。

【讨论】:

    【解决方案2】:

    能够使用上面的函数解决并在每个快照中调用 for 循环

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 2019-07-28
      • 2017-03-11
      • 2022-10-05
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      相关资源
      最近更新 更多