#bash
#bash
Вопрос:
Я создаю скрипт для отображения снимков, созданных в AWS. На данный момент он работает правильно, когда я запускаю скрипт, ищущий снимок по отдельности, выполняемый следующим образом.
./ec2_list_snapshots.sh -i i-04797a6cfc772c17a Instancia: i-04797a6cfc772c17a "SnapshotId": "snap-0d6a5d763704cb67c", "StartTime": "2021-12-02T17:06:25.839000 00:00", "VolumeId": "vol-058db7c144eea4099" "SnapshotId": "snap-0e795e3fc9de3bbf5", "StartTime": "2021-12-02T16:47:57.755000 00:00", "VolumeId": "vol-058db7c144eea4099"
Когда я запускаю скрипт с параметром-w, который ищет покровителя в имени тега, в выводе скрипта я вижу, что все повторяется.
Instancia: INFRA "SnapshotId": "snap-0d6a5d763704cb67c", "StartTime": "2021-12-02T17:06:25.839000 00:00", "VolumeId": "vol-058db7c144eea4099" "SnapshotId": "snap-0e795e3fc9de3bbf5", "StartTime": "2021-12-02T16:47:57.755000 00:00", "VolumeId": "vol-058db7c144eea4099" Instancia: INFRA "SnapshotId": "snap-0f83f47b0deb6ccdd", "StartTime": "2021-12-06T20:13:35.685000 00:00", "VolumeId": "vol-0e3dda56a65fb08f4" Instancia: INFRAESTRUCTURA "SnapshotId": "snap-0d6a5d763704cb67c", "StartTime": "2021-12-02T17:06:25.839000 00:00", "VolumeId": "vol-058db7c144eea4099" "SnapshotId": "snap-0e795e3fc9de3bbf5", "StartTime": "2021-12-02T16:47:57.755000 00:00", "VolumeId": "vol-058db7c144eea4099" Instancia: INFRAESTRUCTURA "SnapshotId": "snap-0f83f47b0deb6ccdd", "StartTime": "2021-12-06T20:13:35.685000 00:00", "VolumeId": "vol-0e3dda56a65fb08f4"
Вот код
#!/bin/bash function show_usage() { printf "Usage: $0 [options [parameters]]n" printf "n" printf "Options:n" printf " -i|--instance, Find snapshot from a single instancen" printf " -w|--wilcard, Find snapshot wilcard in tag namen" printf " -h|--help, Print helpn" exit 1 } if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]] || [ -z "$1" ] ;then show_usage fi while [ ! -z "$1" ]; do case "$1" in -i|--instances) shift BLUE=$(tput setaf 4) NORMAL=$(tput sgr0) INSTANCES=$1 VOLUMEN_ID=$(aws ec2 describe-instances --instance-ids "$INSTANCES" | jq -r '.Reservations|.[].Instances|.[].BlockDeviceMappings[].Ebs.VolumeId') VOLUMEN_INFO=$(aws ec2 describe-snapshots --filters "Name=volume-id,Values=vol-058db7c144eea4099" | jq -r '.Snapshots[] | {SnapshotId, StartTime , VolumeId }' | tr -d "{}") printf "n%s%sn" " ${BLUE}Instancia:${NORMAL} $INSTANCES" "$VOLUMEN_INFO" ;; -w|--wilcard) shift BLUE=$(tput setaf 4) NORMAL=$(tput sgr0) WILDCARD=$1 TAG=`aws ec2 describe-instances --filters "Name=tag:Name,Values=INFRA*" | jq -r '.Reservations[].Instances[].Tags[] | select(.Key=="Name").Value'` for TAGS in $TAG ; do VOLUMEN_ID=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=$WILDCARD*" | jq -r '.Reservations|.[].Instances|.[].BlockDeviceMappings[].Ebs.VolumeId') for VOLUMEN_SNAPSHOT in $VOLUMEN_ID ; do VOLUMEN_INFO=$(aws ec2 describe-snapshots --filters "Name=volume-id,Values=$VOLUMEN_SNAPSHOT" | jq -r '.Snapshots[] | {SnapshotId, StartTime , VolumeId }' | tr -d "{}") done printf "n%s%sn" " ${BLUE}Instancia:${NORMAL} $TAGS" "$VOLUMEN_INFO" done ;; *) show_usage ;; esac shift done
My idea is that when executing the script with the parameter -w the output is as follows:
Instancia: INFRA "SnapshotId": "snap-0d6a5d763704cb67c", "StartTime": "2021-12-02T17:06:25.839000 00:00", "VolumeId": "vol-058db7c144eea4099" "SnapshotId": "snap-0e795e3fc9de3bbf5", "StartTime": "2021-12-02T16:47:57.755000 00:00", "VolumeId": "vol-058db7c144eea4099" Instancia: INFRAESTRUCTURA "SnapshotId": "snap-0d6a5d763704cb67c", "StartTime": "2021-12-02T17:06:25.839000 00:00", "VolumeId": "vol-058db7c144eea4099" "SnapshotId": "snap-0e795e3fc9de3bbf5", "StartTime": "2021-12-02T16:47:57.755000 00:00", "VolumeId": "vol-058db7c144eea4099"
What am I doing wrong?
Regards,