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 |