I have to do something like this :
while ( condition)
do
wait
I have to do this is in linux. While the state of snapshot is pending it should wait.
Content of ec2-describe snapshot is :
SNAPSHOT snap-c7f3 vol-f6a0 completed 2013-12-04T09:24:50+0000 100% 109030037527 10 2013-12-04: Daily Backup for SaMachine (VolID:vol-f09a0 InstID:i-2604)
SNAPSHOT snap-c7df9 vol-3f6b completed 2013-12-04T09:24:54+0000 100% 109030037527 10 2013-12-04: Daily Backup for sa_test_VPC (VolID:vol-3InstID:i-e1c46)
How to do this? How should I use grep and all that ?
#!/bin/bash
# Setting the environmental variables
export EC2_HOME=/opt/ec2/tools
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export SOURCE_REGION="us-west-2"
export DESTINATION_REGION="us-east-1"
# Set the variable today-date to current date
today_date=`date +%Y-%m-%d`
echo "$today_date"
# Set the variable date_dir to yesterday's date
date_dir=$(date +%Y-%m-%d -d '-1 days')
echo "$date_dir"
#First delete all snapshots older than one day
#Create a file with all scheduled snapshots
echo "First delete all snapshots older than one day"
echo "Create a file with all scheduled snapshots"
read -rsp $'Press enter to continue...\n'
ec2-describe-snapshots | grep -i "$date_dir">"$EC2_HOME/SnapshotsDOW_$today_date"
#Delete snapshots for older backups
echo "Delete snapshots for older backups"
read -rsp $'Press enter to continue...\n'
for snapshot in $(cat "$EC2_HOME/SnapshotsDOW_$today_date" | awk '{print $2}')
do
ec2-delete-snapshot $snapshot
done
#Now create a snapshot for every attached volume to every instance
#Create a file with all attached volumes
echo "Create a file with all attached volumes"
read -rsp $'Press enter to continue...\n'
#ec2-describe-volumes | grep -i "attached" >"$EC2_HOME/ActiveVolumes_$today_date"
#Create a file with all instances
echo "Create a file with all instances"
read -rsp $'Press enter to continue...\n'
ec2-describe-instances | grep -i "tag" | grep -i "name" >"$EC2_HOME/Instances_$today_date"
#Create snapshots of all attached volumes
echo "Create snapshots of all attached volumes"
read -rsp $'Press enter to continue...\n'
awk '{print $2, $3}' "$EC2_HOME/ActiveVolumes_$today_date" | while read vol_id inst_id; do
awk '{print $3, $5}' "$EC2_HOME/Instances_$today_date" | while read inst_id2 name; do
if test "$inst_id" = "$inst_id2"; then
echo ec2-create-snapshot "$vol_id" -d "$today_date: Daily Backup for $inst_id (VolID:$vol_id InstID:$inst_id)"
ec2-create-snapshot "$vol_id" -d "$today_date: Daily Backup for $inst_id (VolID:$vol_id InstID:$inst_id)"
fi
done
done
#Create a file with all latest snapshots
echo "Create a file with all latest snapshots"
read -rsp $'Press enter to continue...\n'
latestdate=$(ec2-describe-snapshots | grep ^SNAPSHOT | sort -rk 5 | awk '{print substr($5, 1, 10); exit}')
ec2-describe-snapshots | grep "^SNAPSHOT.*$latestdate" > "$EC2_HOME/SnapshotsLatest_$today_date"
#Copy the snapshot across multiple regions.
echo "Copy the snapshot across multiple regions."
read -rsp $'Press enter to continue...\n'
for snapshot in $(cat "$EC2_HOME/SnapshotsLatest_$today_date" | awk '{print $2}')
do
ec2-copy-snapshot -r $SOURCE_REGION -s $snapshot -region $DESTINATION_REGION
done
#Send the latest snapshot details to user using mail command.
echo "Send the latest snapshot details to user using mail command"
read -rsp $'Press enter to continue...\n'
mail -s 'VM Snapshot $today_date' jp.com < "$EC2_HOME/SnapshotsLatest_$today_date"
read -rsp $'Press enter to exit...\n'
If you need all the snapshots to be completed, you could use instead:
UPDATE
And, to handle also no output case:
Writing that
while
loop is as simple as this:If you can put it in a shellscript, here's how i'd do it.
Edit
So after reading your current code this is what i would do. You'll have to test it yourself though.
Old script kept for reference