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