xentaur
annotate files/ec2-instances @ 68:f652fab38c7a
ec2 parameters small fixes
| author | Igor Chubin <igor@chub.in> | 
|---|---|
| date | Mon Jan 11 19:36:56 2010 +0200 (2010-01-11) | 
| parents | 6c145935ece5 | 
| children | 
| rev | line source | 
|---|---|
| igor@66 | 1 #!/bin/sh | 
| igor@66 | 2 | 
| igor@67 | 3 # should be run from ~/.xentaur/$NETWORK/ | 
| igor@67 | 4 # and variable NETWORK set | 
| igor@67 | 5 set -e | 
| igor@66 | 6 source ./start-instances-$NETWORK | 
| igor@67 | 7 # variables is here | 
| igor@66 | 8 # start_emulators is here | 
| igor@66 | 9 | 
| igor@66 | 10 message() | 
| igor@66 | 11 { | 
| igor@66 | 12 printf "\033[1;33m[`date +"%T.%N"|cut -c1-12`] $*\033[0;39m\n" | 
| igor@66 | 13 } | 
| igor@66 | 14 | 
| igor@66 | 15 start_instances() | 
| igor@66 | 16 { | 
| igor@66 | 17 message "* Starting instances" | 
| igor@66 | 18 > $NETWORK-instances | 
| igor@66 | 19 for i in `seq 0 $((INSTANCES_NUMBER-1))` | 
| igor@66 | 20 do | 
| igor@66 | 21 > /tmp/$NETWORK-ec2-run-instances | 
| igor@66 | 22 ec2-run-instances $INSTANCE_AMI -z $EC2_ZONE -k $SSH_KEYPAIR > /tmp/$NETWORK-ec2-run-instances | 
| igor@66 | 23 cat /tmp/$NETWORK-ec2-run-instances | grep INSTANCE | awk '{print $2}' >> $NETWORK-instances | 
| igor@66 | 24 message Instance `tail -1 $NETWORK-instances` started | 
| igor@66 | 25 done | 
| igor@66 | 26 message "* All $INSTANCES_NUMBER instances started" | 
| igor@66 | 27 cat $NETWORK-instances | 
| igor@66 | 28 } | 
| igor@66 | 29 | 
| igor@66 | 30 wait_for_loading() | 
| igor@66 | 31 { | 
| igor@66 | 32 message "* Waiting for the instances finish loading" | 
| igor@66 | 33 > $NETWORK-instances-ready | 
| igor@66 | 34 exit=no | 
| igor@66 | 35 while [ "$exit" != yes ] | 
| igor@66 | 36 do | 
| igor@66 | 37 ec2-describe-instances | grep INSTANCE | egrep "`cat $NETWORK-instances|tr '\n' '|'`"NNNN | grep -q pending || exit=yes | 
| igor@66 | 38 ec2-describe-instances | grep INSTANCE | egrep "`cat $NETWORK-instances|tr '\n' '|'`"NNNN | grep -v pending \ | 
| igor@66 | 39 | egrep -v "`cat $NETWORK-instances-ready|tr '\n' '|'`"XXXX | awk '{print $2}'> /tmp/$NETWORK-instances-new | 
| igor@66 | 40 if [ -s "/tmp/$NETWORK-instances-new" ] | 
| igor@66 | 41 then | 
| igor@66 | 42 cat /tmp/$NETWORK-instances-new >> $NETWORK-instances-ready | 
| igor@66 | 43 echo -n " "`cat /tmp/$NETWORK-instances-new` | 
| igor@66 | 44 rm /tmp/$NETWORK-instances-new | 
| igor@66 | 45 else | 
| igor@66 | 46 echo -n . | 
| igor@66 | 47 fi | 
| igor@66 | 48 sleep 5 | 
| igor@66 | 49 done | 
| igor@66 | 50 echo | 
| igor@66 | 51 message "* Loading finished" | 
| igor@66 | 52 } | 
| igor@66 | 53 | 
| igor@66 | 54 update_dns() | 
| igor@66 | 55 { | 
| igor@66 | 56 message "* Updating DNS records" | 
| igor@66 | 57 i=0 | 
| igor@66 | 58 cat $NETWORK-instances | while read instance | 
| igor@66 | 59 do | 
| igor@66 | 60 echo $NETWORK-node$i A $(host $(ec2-describe-instances $instance | grep INS | awk '{print $4}') | awk '{print $3}') | 
| igor@66 | 61 i=$((i+1)) | 
| igor@66 | 62 done > /tmp/zone-$NETWORK | 
| igor@66 | 63 message "New records:" | 
| igor@66 | 64 cat /tmp/zone-$NETWORK | 
| igor@66 | 65 cat /tmp/zone-$NETWORK | awk '{print $1}' > $NETWORK-hostnames | 
| igor@66 | 66 | 
| igor@66 | 67 #FIXME: The file should be not overwritten, but merged! | 
| igor@66 | 68 sudo mv /tmp/zone-$NETWORK /etc/bind/ec2-include | 
| igor@66 | 69 sudo rndc reload | 
| igor@66 | 70 message "* Updating DNS records finished" | 
| igor@66 | 71 } | 
| igor@66 | 72 | 
| igor@66 | 73 clear_old_ssh_keys() | 
| igor@66 | 74 { | 
| igor@66 | 75 #FIXME! | 
| igor@66 | 76 # rm ~/.ssh/known_hosts | 
| igor@66 | 77 for i in `seq 0 $((INSTANCES_NUMBER-1))` | 
| igor@66 | 78 do | 
| igor@66 | 79 ssh-keygen -R $NETWORK-node$i.$DOMAIN | 
| igor@66 | 80 ssh-keygen -R $NETWORK-node$i | 
| igor@66 | 81 done | 
| igor@66 | 82 } | 
| igor@66 | 83 | 
| igor@66 | 84 ssh_keys() | 
| igor@66 | 85 { | 
| igor@66 | 86 message "* Doing SSH keyscan" | 
| igor@66 | 87 for i in `seq 0 $((INSTANCES_NUMBER-1))` | 
| igor@66 | 88 do | 
| igor@66 | 89 ssh-keyscan $NETWORK-node$i.$DOMAIN | 
| igor@66 | 90 ssh-keyscan $NETWORK-node$i | 
| igor@66 | 91 done > ssh-keys-$NETWORK | 
| igor@66 | 92 clear_old_ssh_keys | 
| igor@66 | 93 cat ssh-keys-$NETWORK >> ~/.ssh/known_hosts | 
| igor@66 | 94 grep ^# ssh-keys-$NETWORK || true | 
| igor@66 | 95 message "* SSH keyscan finished" | 
| igor@66 | 96 } | 
| igor@66 | 97 | 
| igor@66 | 98 attach_block_device() | 
| igor@66 | 99 { | 
| igor@66 | 100 ec2-attach-volume -d /dev/sdb -i `head -1 $NETWORK-instances` $VOLUME_NAME | 
| igor@66 | 101 } | 
| igor@66 | 102 | 
| igor@68 | 103 unlock_root_account() | 
| igor@68 | 104 { | 
| igor@68 | 105 for i in `seq 0 $((INSTANCES_NUMBER-1))` | 
| igor@68 | 106 do | 
| igor@68 | 107 host=$NETWORK-node$i.$DOMAIN | 
| igor@68 | 108 ssh -i $SSH_SECRET_KEY ubuntu@$host "sudo sh -c 'cat .ssh/authorized_keys > /root/.ssh/authorized_keys'" | 
| igor@68 | 109 done | 
| igor@68 | 110 } | 
| igor@68 | 111 | 
| igor@66 | 112 configure_instances() | 
| igor@66 | 113 { | 
| igor@66 | 114 #FIXME: Only for managed hosts! Not for all! | 
| igor@66 | 115 cat <<EOF > ~/.ssh/config | 
| igor@66 | 116 Host *.$DOMAIN | 
| igor@66 | 117 User root | 
| igor@66 | 118 IdentityFile $SSH_SECRET_KEY | 
| igor@66 | 119 EOF | 
| igor@66 | 120 > $NETWORK-preparation.log | 
| igor@66 | 121 message "* Preparing network. Detailed log messages are in $NETWORK-preparation.log" | 
| igor@66 | 122 for i in `seq 0 $((INSTANCES_NUMBER-1))` | 
| igor@66 | 123 do | 
| igor@66 | 124 host=$NETWORK-node$i.$DOMAIN | 
| igor@66 | 125 message "* Preparing $host" | 
| igor@66 | 126 message "** Copying configuration files" | 
| igor@66 | 127 ssh $host 'mkdir /etc/xgurulla' >> $NETWORK-preparation.log 2>&1 | 
| igor@66 | 128 scp ssh-keys-$NETWORK $host:~/.ssh/known_hosts >> $NETWORK-preparation.log 2>&1 | 
| igor@66 | 129 scp $SSH_SECRET_KEY $host:~/.ssh/id_dsa >> $NETWORK-preparation.log 2>&1 | 
| igor@66 | 130 cat <<EOF | ssh $host 'cat > /etc/xgurulla/config' | 
| igor@66 | 131 NETWORK=$NETWORK | 
| igor@66 | 132 N=$i | 
| igor@66 | 133 SERVER=$NETWORK-node0.$DOMAIN | 
| igor@66 | 134 HOSTNAME=$host | 
| igor@66 | 135 EOF | 
| igor@66 | 136 scp $SCRIPTS_PATH/prepare-ec2-instance $host:/etc/xgurulla/ >> $NETWORK-preparation.log 2>&1 | 
| igor@66 | 137 message "** Installing software" | 
| igor@66 | 138 ssh $host sh /etc/xgurulla/prepare-ec2-instance >> $NETWORK-preparation.log 2>&1 | 
| igor@66 | 139 done | 
| igor@66 | 140 } | 
| igor@66 | 141 | 
| igor@66 | 142 start_all() { | 
| igor@66 | 143 start_instances | 
| igor@66 | 144 wait_for_loading | 
| igor@66 | 145 update_dns | 
| igor@66 | 146 ssh_keys | 
| igor@66 | 147 attach_block_device | 
| igor@68 | 148 unlock_root_account | 
| igor@66 | 149 configure_instances | 
| igor@66 | 150 message "* Starting emulators" | 
| igor@66 | 151 start_emulators | 
| igor@66 | 152 message "* Networking building completed" | 
| igor@66 | 153 } | 
| igor@66 | 154 | 
| igor@66 | 155 stop_instances() | 
| igor@66 | 156 { | 
| igor@66 | 157 [ -s "$NETWORK-instances" ] && ec2-terminate-instances `cat $NETWORK-instances` | 
| igor@66 | 158 ec2-describe-instances | 
| igor@66 | 159 } | 
| igor@66 | 160 | 
| igor@66 | 161 | 
| igor@66 | 162 stop_all() | 
| igor@66 | 163 { | 
| igor@66 | 164 stop_instances | 
| igor@66 | 165 } | 
| igor@66 | 166 | 
| igor@66 | 167 if [ "$1" = start ] | 
| igor@66 | 168 then | 
| igor@66 | 169 start_all | 
| igor@66 | 170 elif [ "$1" = stop ] | 
| igor@66 | 171 then | 
| igor@66 | 172 stop_all | 
| igor@66 | 173 else | 
| igor@66 | 174 cat <<USAGE | 
| igor@66 | 175 Usage: | 
| igor@66 | 176 | 
| igor@66 | 177 $0 start | stop | 
| igor@66 | 178 | 
| igor@66 | 179 USAGE | 
| igor@66 | 180 fi | 
