Вариант использования:
Экспортируйте список снимков в текстовом файле (old_snapshots.txt) в контейнер S3. Из Jenkins используйте команду aws cp, чтобы скопировать файл в Jenkins /tmp/directory
--dry-run did not show any error
Однако при передаче следующей строки bash с командой aws delete в Jenkins отображается сообщение SUCCESS, в то же время сообщается, что произошла ошибка, и снимки не удаляются.
## actual deletion
file="/tmp/old_snapshots.txt"
while read delete_data
do
aws ec2 --region eu-west-1 delete-snapshot --snapshot-id $file
echo "Deleting snapshot $delete_data"
done <"$file"
Выход
An error occurred (InvalidParameterValue) when calling the DeleteSnapshot operation: Value (/tmp/old_snapshots.txt) for parameter snapshotId is invalid. Expected: 'snap-...'.
Deleting snapshot snap-xxxx81xxxxxx7fxxx
An error occurred (InvalidParameterValue) when calling the DeleteSnapshot operation: Value (/tmp/old_snapshots.txt) for parameter snapshotId is invalid. Expected: 'snap-...'.
Deleting snapshot snap-xxxacc49xxxxxxc26
An error occurred (InvalidParameterValue) when calling the DeleteSnapshot operation: Value (/tmp/old_snapshots.txt) for parameter snapshotId is invalid. Expected: 'snap-...'.
Deleting snapshot snap-04xxxxxxxx3fa3cxxxxxxf4
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Запрос:Эта ошибка An error occurred (InvalidParameterValue) when calling the DeleteSnapshot operation
кажется слишком общей? Кто-нибудь сталкивался с этой проблемой? Кроме того, я провел ручной тест удаления только одного снимка с помощью aws cli, вручную добавив идентификатор снимка в Jenkins, и это отлично работает. Любые предложения будут высоко оценены.
Включая команду aws
aws ec2 --region eu-west-1 delete-snapshot --snapshot-id snap-01x1618xxxxxxa51x
Found snapshotid: snap-01x1618xxxxxxa51x in the uploaded file: /tmp/old_snapshots.txt
Now deleting snapshot id snap-01x1618xxxxxxa51x
решение1
Вам нужно немного изменить свой сценарий.
$ sh abc.sh
What is in delete_data snap-xxxx81xxxxxx7fxxx
What is in file /tmp/old_snapshots.txt
Deleting snapshot snap-xxxx81xxxxxx7fxxx
What is in delete_data snap-xxxacc49xxxxxxc26
What is in file /tmp/old_snapshots.txt
Deleting snapshot snap-xxxacc49xxxxxxc26
What is in delete_data snap-04xxxxxxxx3fa3cxxxxxxf4
What is in file /tmp/old_snapshots.txt
Deleting snapshot snap-04xxxxxxxx3fa3cxxxxxxf4
$ cat abc.sh
## actual deletion
file="/tmp/old_snapshots.txt"
while read delete_data
do
#aws ec2 --region eu-west-1 delete-snapshot --snapshot-id $file
echo "What is in delete_data $delete_data"
echo "What is in file $file"
echo "Deleting snapshot $delete_data"
done < $file
Ваш скрипт вызывает file
переменную, которая является константой, но вам нужно передать содержимое файла построчно. Поэтому замените ниже
aws ec2 --region eu-west-1 delete-snapshot --snapshot-id $file
С
aws ec2 --region eu-west-1 delete-snapshot --snapshot-id $delete_data
решение2
Для удобства других пользователей сообщества я использовал флаг, --debug
чтобы обнаружить, что '\r'
в игру добавляются дополнительные символы.щелчок-#
Отладочный вывод
2020-01-28 18:09:02,295 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.ec2.delete-snapshot.snapshot-id: calling handler <awscli.paramfile.URIArgumentHandler object at >
2020-01-28 18:09:02,296 - MainThread - botocore.hooks - DEBUG - Event process-cli-arg.ec2.delete-snapshot: calling handler <awscli.argprocess.ParamShorthandParser object at >
2020-01-28 18:09:02,296 - MainThread - awscli.arguments - DEBUG - Unpacked value of u'snap-0xxxxxxxxxxxxxxxx\r' for parameter "snapshot_id": u'snap-0xxxxxxxxxxxxxxxx\r'
Чтобы решить эту проблему: я передал tr -d '\r'
значение переменной, чтобы начать разговор.
Пример:
tr -d '\r' < input > output
Обновленный сценарий
file="/tmp/old_snapshots.txt"
cat $file | tr -d '\r' | while read -r line;
do
aws ec2 --region eu-west-1 delete-snapshot --snapshot-id $line
done