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)"