github.com/rkt/rkt@v1.30.1-0.20200224141603-171c416fac02/tests/aws.sh (about)

     1  #!/bin/bash
     2  
     3  set -e
     4  
     5  SCRIPTPATH=$(dirname "$0")
     6  cd $SCRIPTPATH
     7  SCRIPTPATH=$PWD
     8  
     9  KEY_PAIR_NAME=rkt-testing-${USER}
    10  SECURITY_GROUP=rkt-testing-${USER}-security-group
    11  REGION=us-west-1
    12  
    13  ## First time only
    14  if [ "$1" = "setup" ] ; then
    15    MYIP=$(curl --silent http://checkip.amazonaws.com/)
    16  
    17    aws --region $REGION ec2 create-key-pair --key-name $KEY_PAIR_NAME --query 'KeyMaterial' --output text > ${KEY_PAIR_NAME}.pem
    18    chmod 0600 ${KEY_PAIR_NAME}.pem
    19    aws --region $REGION ec2 create-security-group --group-name $SECURITY_GROUP --description "Security group for rkt testing"
    20    aws --region $REGION ec2 authorize-security-group-ingress --group-name $SECURITY_GROUP --protocol tcp --port 22 --cidr $MYIP/32
    21    exit 0
    22  fi
    23  
    24  DISTRO=$1
    25  
    26  test -f cloudinit/${DISTRO}.cloudinit
    27  CLOUDINIT=$PWD/cloudinit/${DISTRO}.cloudinit
    28  
    29  if [ "$DISTRO" = "fedora-24" ] ; then
    30    # https://getfedora.org/en/cloud/download/
    31    # Search on aws --region $REGION or look at
    32    # https://apps.fedoraproject.org/datagrepper/raw?category=fedimg
    33    # Sources: https://github.com/fedora-infra/fedimg/blob/develop/bin/list-the-amis.py
    34  
    35    # Fedora-Cloud-Base-24-20160507.n.0.x86_64-us-west-1-HVM-standard-0
    36    AMI=ami-8b4c35eb
    37    AWS_USER=fedora
    38  elif [ "$DISTRO" = "fedora-25" ] ; then
    39    # Fedora-Cloud-Base-25-20161220.0.x86_64-us-west-1-HVM-standard-0
    40    AMI=ami-c70d5ca7
    41    AWS_USER=fedora
    42  elif [ "$DISTRO" = "fedora-rawhide" ] ; then
    43    # Fedora-Cloud-Base-rawhide-20160129.x86_64-us-west-1-HVM-standard-0
    44    AMI=ami-a18dfac1
    45    AWS_USER=fedora
    46  elif [ "$DISTRO" = "ubuntu-1604" ] ; then
    47    # https://cloud-images.ubuntu.com/locator/ec2/
    48    # ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-20160627
    49    AMI=ami-b20542d2
    50    AWS_USER=ubuntu
    51  elif [ "$DISTRO" = "debian-testing" ] ; then
    52    # https://wiki.debian.org/Cloud/AmazonEC2Image/Jessie
    53    # Debian 8.6+1
    54    AMI=ami-db6c39bb
    55    AWS_USER=admin
    56  fi
    57  
    58  test -n "$AMI"
    59  test -n "$AWS_USER"
    60  test -f "${KEY_PAIR_NAME}.pem"
    61  
    62  INSTANCE_ID=$(aws --region $REGION ec2 run-instances \
    63  	--image-id $AMI \
    64  	--count 1 \
    65  	--key-name $KEY_PAIR_NAME \
    66  	--security-groups $SECURITY_GROUP \
    67  	--instance-type m4.large \
    68  	--instance-initiated-shutdown-behavior terminate \
    69  	--user-data file://$CLOUDINIT \
    70  	--output text \
    71  	--query 'Instances[*].InstanceId' \
    72  	)
    73  echo INSTANCE_ID=$INSTANCE_ID
    74  
    75  aws --region $REGION ec2 create-tags \
    76  	--resources ${INSTANCE_ID} \
    77  	--tags \
    78  	Key=Name,Value=rkt-tst-${DISTRO} \
    79  	Key=BaseAmi,Value=${AMI} \
    80  	Key=User,Value=${AWS_USER}
    81  
    82  
    83  while state=$(aws --region $REGION ec2 describe-instances \
    84  	--instance-ids $INSTANCE_ID \
    85  	--output text \
    86  	--query 'Reservations[*].Instances[*].State.Name' \
    87  	); test "$state" = "pending"; do
    88    sleep 1; echo -n '.'
    89  done; echo " $state"
    90  
    91  AWS_IP=$(aws --region $REGION ec2 describe-instances \
    92  	--instance-ids $INSTANCE_ID \
    93  	--output text \
    94  	--query 'Reservations[*].Instances[*].PublicIpAddress' \
    95  	)
    96  echo AWS_IP=$AWS_IP
    97  
    98  echo "Waiting for the instance to boot..."
    99  sleep 60
   100  echo "Waiting for the instance to be initialized..."
   101  echo "To check the logs:"
   102  echo ssh -i ${SCRIPTPATH}/${KEY_PAIR_NAME}.pem ${AWS_USER}@${AWS_IP} tail -f /var/log/cloud-init-output.log
   103  while ! ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=20 -o ConnectTimeout=10 -o ConnectionAttempts=60 -i ${SCRIPTPATH}/${KEY_PAIR_NAME}.pem ${AWS_USER}@${AWS_IP} stat /var/lib/cloud/instances/$INSTANCE_ID/boot-finished >/dev/null 2>&1
   104  do
   105    echo -n '.'
   106    sleep 30
   107  done
   108  
   109  
   110  NAME=rkt-ci-jenkins-$(date +"%Y-%m-%d")-$DISTRO
   111  AMI_ID=$(aws --region $REGION ec2 create-image --instance-id $INSTANCE_ID --name $NAME --output text)
   112  
   113  echo -e "\nWaiting for the AMI to be available..."
   114  while ! aws --region $REGION ec2 describe-images --image-id $AMI_ID | grep -q available
   115  do
   116    echo -n '.'
   117    sleep 30
   118  done
   119  
   120  echo -e "\nRemoving instance..."
   121  
   122  aws --region $REGION ec2 terminate-instances --instance-ids $INSTANCE_ID --output text
   123  
   124  echo "${DISTRO} AMI available: $AMI_ID (Region $REGION)"