2017-01-23 5 views
0

Я хочу посмотреть на снимок, созданный прошлой неделе, и удалить его автоматически, используя этот код:MissingParameter при вызове операцию DeleteSnapshot

last_week = today - timedelta(days=7) 
logger.info('Looking for snapshots of : {0}'.format(str(last_week))) 
tag_value_last = 'snap-hebdo-'+str(last_week) 
all_snaps = ec2client.describe_snapshots(Filters=[ {'Name': 'tag-value','Values': [tag_value_last]}],) 
if all_snaps == None: 
    logger.error('No snapshot found with the tag : {0}'.format(tag_value_last)) 
    sys.exit(1) 
else: 
    snapshotId_last ='' 
    for i in all_snaps['Snapshots']: 
     snapshotId_last = i['SnapshotId'] 
    logger.info('Old snapshot of {0} found with ID: {1}'.format(str(last_week),snapshotId_last)) 
    logger.info('Deleting the snapshot with ID : {0} ...'.format(snapshotId_last)) 
    ec2client.delete_snapshot(SnapshotId=snapshotId_last) 
    logger.info('Done.') 

Моя проблема заключается в том, что регистратор получает сообщение Old snapshot of 2017-01-16 found with ID: и Удаление снимок с ID: ... `, то я получаю ошибку

An error occurred (MissingParameter) when calling the DeleteSnapshot operation: The request must contain the parameter id 

то, что я не понимаю, почему сценарий входит еще из условия даже, что переменная all_snaps пуста, и он не возвращает снимок?

ответ

0

describe_snapshots() не возвращает None, когда нет соответствия фильтрам. Ответ здесь будет выглядеть как {'Snapshots': []}.

Вы должны изменить if с проверкой длины списка под Snapshots ключом в ответе dict.

if not len(all_snaps['Snapshots']): 
    sys.exit(1)