#!/bin/bash # # following prerequisites are needed # * all ssh-keys specified with the -k option must # be present to current user (use add_keys script to import) # Todo: How can we add more than one sshkey with the nova cli ? # 2 cpus, 10gb disk, 1024 ram flavor='Medium' secgroup='Bitmask' usage() { cat << EOF usage: $0 options This script reverts an openstack instance to it's snapshot. mandatory: -i -s -k add sshkey optional: -f defaults to "$flavor" -g defaults to "$secgroup" -h Show this message -v verbose mode example: ./revert_instance_from_snapshot.sh -i resettest.testing.bitmask.net -s resettest-firstboot -k varac EOF } set -- $(getopt hi:s:k:f:g:v "$@") while [ $# -gt 0 ] do case "$1" in (-h) usage; exit 1 ;; (-i) instance="$2"; shift;; (-s) snapshot="$2"; shift;; (-k) key="$2"; shift;; (-f) flavor="$2"; shift;; (-g) secgroup="$2"; shift;; (--) shift; break;; (-*) echo "$0: error - unrecognized option $1" 1>&2; exit 1;; (*) break;; esac shift done if [[ -z $instance ]] || [[ -z $snapshot ]] || [[ -z $key ]] then usage exit 1 fi echo "Querying $instance..." ips=`nova show --minimal $instance | grep 'private network'| cut -f 3 -d'|'` # 192.168.10.2, 192.168.11.7, 192.168.11.9 float_ips=`echo "$ips"| cut -f 2- -d',' | sed 's/,/ /g'` # 192.168.11.7 192.168.11.9 echo "Floating IPs: $float_ips" for ip in $float_ips do echo "Removing floating ip $ip from $instance" nova floating-ip-delete $ip # will re-allocate the removed ip in the pool echo "Re-allocating $ip to the floating-ip pool" nova floating-ip-create > /dev/null done echo echo "Deleting $instance" nova delete $instance echo echo "Booting $instance from snapshot $snap with boot cmd:" boot_cmd="nova boot --image $snapshot --flavor $flavor --security-groups $secgroup --key_name $key $instance" echo $boot_cmd result=`$boot_cmd` # unfortunatly unformatted #echo $result > /tmp/result echo $result newid=`echo "$result" | grep '| id ' | cut -d '|' -f 3 | sed 's/ //g' ` echo echo "New ID for instance $instance: $newid, sleeping 5s so fixed IP shows up for instance" echo # todo: check every sec for fixed ip to show up # https://leap.se/code/issues/3743 sleep 5 for ip in $float_ips do echo "Adding floating ip $ip to $newid" nova add-floating-ip $newid $ip done nova list echo echo "Hang on and wait for the new instance (ID $newid) to finish building before you try to login !" echo echo "You could watch the progress and grep the ssh ecdsa hostkey after booting with following cmd:" echo " watch -n 10 \"nova list; nova console-log $newid | grep -A 2 ecdsa | grep root@\""