config/scripts/cloud_import.sh

81 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
ami_import=""
s3_import=""
today=$(date +%Y-%m-%d.%HH%Mmin%S)
BUCKET=${3:-cloug-vms}
IMG_NAME=${1:-current.img}
DESC=${2:-"${USER} ${today}"}
function finish {
if [[ ! -z "$ami_import" && -e $ami_import ]]; then
rm $ami_import
fi
if [[ ! -z "$s3_import" && -e $s3_import ]]; then
rm $s3_import
fi
}
trap finish EXIT
if [ $# == 0 ]; then
echo "$(basename $0) IMG_TO_IMPORT [\"a description\"] [BUCKET_NAME]"
exit 0
fi
S3_IMPORT="
{
\"Description\": \"${DESC}\",
\"Format\": \"raw\",
\"UserBucket\": {
\"S3Bucket\": \"${BUCKET}\",
\"S3Key\": \"${IMG_NAME}\"
}
}
"
aws s3 cp ${1:-current.img} s3://$BUCKET
s3_import=$(mktemp)
echo ${S3_IMPORT} > ${s3_import}
import_id=$(aws ec2 import-snapshot --description ${DESC} --disk-container file://${s3_import} | grep ImportTaskId | grep ImportTaskId | awk -F: '{print $2}' | sed "s/[ \",]//g")
echo "Wainting for snapshot with import id : $import_id"
_SNAP=""
while [[ -z ${_SNAP} ]]; do
_SNAP=$(aws ec2 describe-import-snapshot-tasks --import-task-ids $import_id | grep "Status" | grep "complete" ) || true
echo -n "."
sleep 5
done
rm $s3_import
echo ""
_SNAP=$(aws ec2 describe-import-snapshot-tasks --import-task-ids $import_id | grep SnapshotId | grep -Eo "snap-[[:alnum:]]*")
echo "Snaphot Id ${_SNAP}"
echo "Import as AMI"
AMI_IMPORT="
[
{
\"DeviceName\": \"/dev/sda1\",
\"Ebs\": {
\"SnapshotId\": \"${_SNAP}\",
\"VolumeType\": \"gp2\"
}
}
]
"
ami_import=$(mktemp)
echo "$AMI_IMPORT" > ${ami_import}
ami=$(aws ec2 register-image --name "$DESC" --architecture x86_64 --virtualization-type hvm --root-device-name "/dev/sda1" --block-device-mappings file://${ami_import})
rm $ami_import
echo ${ami}
echo "Done"