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: и ̀ удаление снимка с идентификатором: ...`тогда я получаю сообщение об ошибке

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

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

1 ответ

Решение

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

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

if not len(all_snaps['Snapshots']):
    sys.exit(1)
Другие вопросы по тегам