list aws EBS Volume if Tag (Date) <= "Value"
У меня есть вариант использования, когда мы помечаем том EBS датой после завершения работы связанного с ним экземпляра.
#!/bin/bash
dateToday=`date +'%Y-%m-%d'`
aws ec2 create-tags --resources $volume --tags Key=Date,Value=$dateToday
Теперь мне нужно удалить все тома EBS, дата которых на 3 дня старше, чем $dateToday.
dateToDelete=`date --date "3 days ago" +'%Y-%m-%d'
aws ec2 describe-volume --query 'Volumes[?Tags[?Key == `Date`].Value)<='${dateToDelete}'] | [].[VolumeId]' --region eu-central-1 --profile aws_new_stage
Я пытаюсь выполнить это, но это приводит к ошибке.
1 ответ
Я думаю, что лучше всего отфильтровать все тома, в которых Date
теги, затем проверяет сравнение даты.
вы можете попробовать ниже
#!/bin/sh
dateToDelete=`date --date "3 days ago" +'%Y-%m-%d'`
#volumes that has Date tag
volumes_id_with_date_tag_only=$(aws ec2 describe-volumes --volume-ids --query 'Volumes[?not_null(Tags[?Key == `Date`].Value)].VolumeId' --output text)
#pass the list of that volumes and then remove volume with null tags using JQ
aws ec2 describe-volumes --volume-ids $volumes_id_with_date_tag_only --query "Volumes[].{VolumeId:VolumeId,Tags:Tags[?Value <= \``echo $dateToDelete`\`].Value | [0]}" | jq .[] | jq 'select(.Tags != null)' | jq .VolumeId
Я не нашел способа удалить нулевые теги после получения желаемых томов с помощью jmespath
выход
"VolumeId": "vol-0a367abcdf"