我正在尝试将每个快照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'])
感谢您对约翰的帮助
看来您的要求是:
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和说明。
能够通过上面的函数解析并为每个快照调用for循环