diff --git a/baseimage/createEC2Image b/baseimage/createEC2Image index 29e5d54d9..1542979b3 100755 --- a/baseimage/createEC2Image +++ b/baseimage/createEC2Image @@ -9,7 +9,7 @@ export JSON="${SOURCE_DIR}/node_modules/.bin/json" provider="digitalocean" installer_revision=$(git rev-parse HEAD) box_name="" -server_id="" +instance_id="" server_ip="" destroy_server="yes" @@ -26,13 +26,12 @@ key_pair_name="id_rsa_yellowtent" [[ $(uname -s) == "Darwin" ]] && GNU_GETOPT="/usr/local/opt/gnu-getopt/bin/getopt" || GNU_GETOPT="getopt" readonly GNU_GETOPT -args=$(${GNU_GETOPT} -o "" -l "revision:,name:,server-ip:,no-destroy" -n "$0" -- "$@") +args=$(${GNU_GETOPT} -o "" -l "revision:,name:,no-destroy" -n "$0" -- "$@") eval set -- "${args}" while true; do case "$1" in --revision) installer_revision="$2"; shift 2;; - --server-ip) server_ip="$2"; shift 2;; --name) box_name="$2"; destroy_server="no"; shift 2;; --no-destroy) destroy_server="no"; shift 2;; --) break;; @@ -45,10 +44,10 @@ readonly scp22="scp -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null -o Stri readonly ssh22="ssh -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ${ssh_keys}" echo "Creating EC2 instance" -server_id=$(aws ec2 run-instances --image-id ${ami_id} --region ${region} --profile ${aws_credentials} --security-group-ids ${security_group} --instance-type ${instance_type} --key-name ${key_pair_name} --subnet-id ${subnet_id} --associate-public-ip-address | $JSON Instances[0].InstanceId) -echo "Got InstanceId: ${server_id}" +instance_id=$(aws ec2 run-instances --image-id ${ami_id} --region ${region} --profile ${aws_credentials} --security-group-ids ${security_group} --instance-type ${instance_type} --key-name ${key_pair_name} --subnet-id ${subnet_id} --associate-public-ip-address | $JSON Instances[0].InstanceId) +echo "Got InstanceId: ${instance_id}" -server_ip=$(aws ec2 describe-instances --instance-id ${server_id} --region ${region} --profile ${aws_credentials} | $JSON Reservations[0].Instances[0].PublicIpAddress) +server_ip=$(aws ec2 describe-instances --instance-id ${instance_id} --region ${region} --profile ${aws_credentials} | $JSON Reservations[0].Instances[0].PublicIpAddress) echo "Server IP is: ${server_ip}" while true; do @@ -72,3 +71,22 @@ if ! $ssh22 "ubuntu@${server_ip}" "sudo /bin/bash /home/ubuntu/initializeBaseUbu echo "Init script failed" exit 1 fi + +snapshot_name="box-${deploy_env}-${pretty_revision}-${now}" + +echo "Creating ami image ${snapshot_name}" +image_id=$(aws ec2 create-image --region ${region} --profile ${aws_credentials} --instance-id ${instance_id} --name ${snapshot_name} | $JSON ImageId) + +echo "Image creation started for image id: ${image_id}" + +echo "Waiting for image creation to finish..." +while true; do + local event_status=`aws ec2 describe-images --region ${region} --profile ${aws_credentials} --image-id ${image_id} | $JSON Images[0].State` + if [[ "${event_status}" == "available" ]]; then + break + fi + debug -n "." + sleep 10 +done + +echo "Done. New image id is: ${image_id}" diff --git a/baseimage/digitalocean.sh b/baseimage/digitalocean.sh index d1cfd9e84..09da9ea9e 100644 --- a/baseimage/digitalocean.sh +++ b/baseimage/digitalocean.sh @@ -51,7 +51,7 @@ function get_droplet_id() { local droplet_name="$1" id=$($CURL "https://api.digitalocean.com/v2/droplets?per_page=200" | $JSON "droplets" | $JSON -c "this.name === '${droplet_name}'" | $JSON "[0].id") [[ -z "$id" ]] && exit 1 - echo "$id" + echo "$id" } function power_off_droplet() {