mirror of
https://github.com/flatcar/scripts.git
synced 2025-11-28 14:01:43 +01:00
oem/ami: Drop in favor of plume
This commit is contained in:
parent
45dffca9b6
commit
cd4e3746cc
@ -1,187 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# This expects to run on an EC2 instance.
|
||||
#
|
||||
# mad props to Eric Hammond for the initial script
|
||||
# https://github.com/alestic/alestic-hardy-ebs/blob/master/bin/alestic-hardy-ebs-build-ami
|
||||
|
||||
# Set pipefail along with -e in hopes that we catch more errors
|
||||
set -e -o pipefail
|
||||
|
||||
DIR=$(dirname $0)
|
||||
source $DIR/regions.sh
|
||||
|
||||
readonly COREOS_EPOCH=1372636800
|
||||
VERSION="master"
|
||||
BOARD="amd64-usr"
|
||||
GROUP="alpha"
|
||||
IMAGE="coreos_production_ami_image.bin.bz2"
|
||||
GS_URL="gs://builds.release.core-os.net"
|
||||
IMG_URL=""
|
||||
IMG_PATH=""
|
||||
|
||||
USAGE="Usage: $0 [-V 1.2.3] [-p path/image.bz2 | -u http://foo/image.bz2]
|
||||
Options:
|
||||
-V VERSION Set the version of this AMI, default is 'master'
|
||||
-b BOARD Set to the board name, default is amd64-usr
|
||||
-g GROUP Set the update group, default is alpha or master
|
||||
-p PATH Path to compressed disk image, overrides -u
|
||||
-u URL URL to compressed disk image, derived from -V if unset.
|
||||
-s STORAGE GS URL for Google storage (used to generate URL)
|
||||
-h this ;-)
|
||||
-v Verbose, see all the things!
|
||||
|
||||
This script must be run from an ec2 host with the ec2 tools installed.
|
||||
"
|
||||
|
||||
while getopts "V:b:g:p:u:s:hv" OPTION
|
||||
do
|
||||
case $OPTION in
|
||||
V) VERSION="$OPTARG";;
|
||||
b) BOARD="$OPTARG";;
|
||||
g) GROUP="$OPTARG";;
|
||||
p) IMG_PATH="$OPTARG";;
|
||||
u) IMG_URL="$OPTARG";;
|
||||
s) GS_URL="$OPTARG";;
|
||||
h) echo "$USAGE"; exit;;
|
||||
v) set -x;;
|
||||
*) exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $(id -u) -eq 0 ]]; then
|
||||
echo "$0: This command should not be ran run as root!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Quick sanity check that the image exists
|
||||
if [[ -n "$IMG_PATH" ]]; then
|
||||
if [[ ! -f "$IMG_PATH" ]]; then
|
||||
echo "$0: Image path does not exist: $IMG_PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
IMG_URL=$(basename "$IMG_PATH")
|
||||
else
|
||||
if [[ -z "$IMG_URL" ]]; then
|
||||
IMG_URL="$GS_URL/$GROUP/boards/$BOARD/$VERSION/$IMAGE"
|
||||
fi
|
||||
if [[ "$IMG_URL" == gs://* ]]; then
|
||||
if ! gsutil -q stat "$IMG_URL"; then
|
||||
echo "$0: Image URL unavailable: $IMG_URL" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if ! curl --fail -s --head "$IMG_URL" >/dev/null; then
|
||||
echo "$0: Image URL unavailable: $IMG_URL" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$VERSION" == "master" ]]; then
|
||||
# Come up with something more descriptive and timestamped
|
||||
TODAYS_VERSION=$(( (`date +%s` - ${COREOS_EPOCH}) / 86400 ))
|
||||
VERSION="${TODAYS_VERSION}-$(date +%H-%M)"
|
||||
GROUP="master"
|
||||
fi
|
||||
|
||||
# Size of AMI file system
|
||||
# TODO: Perhaps define size and arch in a metadata file image_to_vm creates?
|
||||
size=8 # GB
|
||||
arch=x86_64
|
||||
arch2=amd64
|
||||
# The name has a limited set of allowed characterrs
|
||||
name=$(sed -e "s%[^A-Za-z0-9()\\./_-]%_%g" <<< "CoreOS-$GROUP-$VERSION")
|
||||
description="CoreOS $GROUP $VERSION"
|
||||
|
||||
zoneurl=http://instance-data/latest/meta-data/placement/availability-zone
|
||||
zone=$(curl --fail -s $zoneurl)
|
||||
region=$(echo $zone | sed 's/.$//')
|
||||
akiid=${ALL_AKIS[$region]}
|
||||
|
||||
if [ -z "$akiid" ]; then
|
||||
echo "$0: Can't identify AKI, using region: $region" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export EC2_URL="http://ec2.${region}.amazonaws.com"
|
||||
echo "Building AMI in zone $zone, region id $akiid"
|
||||
|
||||
# Create and mount temporary EBS volume with file system to hold new AMI image
|
||||
volumeid=$(ec2-create-volume --size $size --availability-zone $zone |
|
||||
cut -f2)
|
||||
while ! ec2-describe-volumes "$volumeid" | grep -q available
|
||||
do sleep 1; done
|
||||
instanceid=$(curl --fail -s http://instance-data/latest/meta-data/instance-id)
|
||||
echo "Attaching new volume $volumeid locally (instance $instanceid)"
|
||||
ec2-attach-volume --device /dev/sdi --instance "$instanceid" "$volumeid"
|
||||
while [ ! -e /dev/sdi -a ! -e /dev/xvdi ]
|
||||
do sleep 3; done
|
||||
if [ -e /dev/xvdi ]; then
|
||||
dev=/dev/xvdi
|
||||
else
|
||||
dev=/dev/sdi
|
||||
fi
|
||||
|
||||
echo "Attached volume $volumeid as $dev"
|
||||
echo "Writing image from $IMG_URL to $dev"
|
||||
|
||||
# if it is on the local fs, just use it, otherwise try to download it
|
||||
if [[ -n "$IMG_PATH" ]]; then
|
||||
if [[ "$IMG_PATH" =~ \.bz2$ ]]; then
|
||||
bunzip2 -c "$IMG_PATH" | sudo dd of=$dev bs=1M
|
||||
else
|
||||
sudo dd if="$IMG_PATH" of=$dev bs=1M
|
||||
fi
|
||||
elif [[ "$IMG_URL" == gs://* ]]; then
|
||||
gsutil cat "$IMG_URL" | bunzip2 | sudo dd of=$dev bs=1M
|
||||
else
|
||||
curl --fail "$IMG_URL" | bunzip2 | sudo dd of=$dev bs=1M
|
||||
fi
|
||||
|
||||
echo "Detaching $volumeid and creating snapshot"
|
||||
ec2-detach-volume "$volumeid"
|
||||
while ec2-describe-volumes "$volumeid" | grep -q ATTACHMENT
|
||||
do sleep 3; done
|
||||
snapshotid=$(ec2-create-snapshot --description "$name" "$volumeid" | cut -f2)
|
||||
while ec2-describe-snapshots "$snapshotid" | grep -q pending
|
||||
do sleep 30; done
|
||||
|
||||
echo "Created snapshot $snapshotid, deleting $volumeid"
|
||||
ec2-delete-volume "$volumeid"
|
||||
|
||||
echo "Registering hvm AMI"
|
||||
hvm_amiid=$(ec2-register \
|
||||
--name "${name}-hvm" \
|
||||
--description "$description (HVM)" \
|
||||
--architecture "$arch" \
|
||||
--virtualization-type hvm \
|
||||
--root-device-name /dev/xvda \
|
||||
--block-device-mapping /dev/xvda=$snapshotid::true \
|
||||
--block-device-mapping /dev/xvdb=ephemeral0 |
|
||||
cut -f2)
|
||||
|
||||
echo "Registering paravirtual AMI"
|
||||
amiid=$(ec2-register \
|
||||
--name "$name" \
|
||||
--description "$description (PV)" \
|
||||
--architecture "$arch" \
|
||||
--virtualization-type paravirtual \
|
||||
--kernel "$akiid" \
|
||||
--root-device-name /dev/sda \
|
||||
--block-device-mapping /dev/sda=$snapshotid::true \
|
||||
--block-device-mapping /dev/sdb=ephemeral0 |
|
||||
cut -f2)
|
||||
|
||||
cat <<EOF
|
||||
$description
|
||||
architecture: $arch ($arch2)
|
||||
region: $region ($zone)
|
||||
aki id: $akiid
|
||||
name: $name
|
||||
description: $description
|
||||
EBS volume: $volumeid (deleted)
|
||||
EBS snapshot: $snapshotid
|
||||
PV AMI id: $amiid
|
||||
HVM AMI id: $hvm_amiid
|
||||
EOF
|
||||
@ -1,190 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# This expects to run on an EC2 instance.
|
||||
#
|
||||
# mad props to Eric Hammond for the initial script
|
||||
# https://github.com/alestic/alestic-hardy-ebs/blob/master/bin/alestic-hardy-ebs-build-ami
|
||||
|
||||
# AKI ids from:
|
||||
# http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html
|
||||
# we need pv-grub-hd00 x86_64
|
||||
|
||||
# Set pipefail along with -e in hopes that we catch more errors
|
||||
set -e -o pipefail
|
||||
|
||||
DIR=$(dirname $0)
|
||||
source $DIR/regions.sh
|
||||
|
||||
USAGE="Usage: $0 -a ami-id
|
||||
-a ami-id ID of the AMI to be coppied.
|
||||
-V VERSION Find AMI by CoreOS version.
|
||||
-b BOARD Set to the board name, default is amd64-usr
|
||||
-g GROUP Set the update group, default is alpha
|
||||
-l ACCOUNT Grant launch permission to a given AWS account ID.
|
||||
-r REGION Copy to the specified region, may be repeated.
|
||||
-h this ;-)
|
||||
-v Verbose, see all the things!
|
||||
|
||||
This script must be run from an ec2 host with the ec2 tools installed.
|
||||
"
|
||||
|
||||
AMI=
|
||||
VER=
|
||||
BOARD="amd64-usr"
|
||||
GROUP="alpha"
|
||||
GRANT_LAUNCH=""
|
||||
REGIONS=()
|
||||
|
||||
add_region() {
|
||||
if [[ -z "${ALL_AKIS[$1]}" ]]; then
|
||||
echo "Invalid region '$1'" >&2;
|
||||
exit 1
|
||||
fi
|
||||
REGIONS+=( "$1" )
|
||||
}
|
||||
|
||||
clean_version() {
|
||||
sed -e 's%[^A-Za-z0-9()\\./_-]%_%g' <<< "$1"
|
||||
}
|
||||
|
||||
while getopts "a:V:b:g:l:r:hv" OPTION
|
||||
do
|
||||
case $OPTION in
|
||||
a) AMI="$OPTARG";;
|
||||
V) VER="$OPTARG";;
|
||||
b) BOARD="$OPTARG";;
|
||||
g) GROUP="$OPTARG";;
|
||||
l) GRANT_LAUNCH="${OPTARG}";;
|
||||
r) add_region "$OPTARG";;
|
||||
h) echo "$USAGE"; exit;;
|
||||
v) set -x;;
|
||||
*) exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $(id -u) -eq 0 ]]; then
|
||||
echo "$0: This command should not be ran run as root!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$VER" ]]; then
|
||||
echo "$0: Providing the verison via -V is required." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
zoneurl=http://instance-data/latest/meta-data/placement/availability-zone
|
||||
zone=$(curl --fail -s $zoneurl)
|
||||
region=$(echo $zone | sed 's/.$//')
|
||||
export EC2_URL="https://ec2.${region}.amazonaws.com"
|
||||
|
||||
if [[ -z "$AMI" ]]; then
|
||||
search_name=$(clean_version "CoreOS-$GROUP-$VER")
|
||||
AMI=$(ec2-describe-images -F name="${search_name}" | grep -m1 ^IMAGE \
|
||||
| cut -f2) || true # Don't die silently, error messages are good
|
||||
if [[ -z "$AMI" ]]; then
|
||||
echo "$0: Cannot find an AMI named $search_name" >&2
|
||||
exit 1
|
||||
fi
|
||||
HVM=$(ec2-describe-images -F name="${search_name}-hvm" \
|
||||
| grep -m1 ^IMAGE | cut -f2) || true
|
||||
if [[ -z "$HVM" ]]; then
|
||||
echo "$0: Cannot find an AMI named ${search_name}-hvm" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# check to make sure this is a valid image
|
||||
if ! ec2-describe-images -F image-id="$AMI" | grep -q "$AMI"; then
|
||||
echo "$0: Unknown image: $AMI" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ ${#REGIONS[@]} -eq 0 ]]; then
|
||||
REGIONS=( "${MAIN_REGIONS[@]}" )
|
||||
fi
|
||||
|
||||
# The name has a limited set of allowed characterrs
|
||||
name=$(clean_version "CoreOS-$GROUP-$VER")
|
||||
description="CoreOS $GROUP $VER"
|
||||
|
||||
do_copy() {
|
||||
local r="$1"
|
||||
local virt_type="$2"
|
||||
local local_amiid="$3"
|
||||
local r_amiid r_name r_desc
|
||||
|
||||
# run in a subshell, the -e flag doesn't get inherited
|
||||
set -e
|
||||
|
||||
echo "Starting copy of $virt_type $local_amiid from $region to $r"
|
||||
if [[ "$virt_type" == "hvm" ]]; then
|
||||
r_name="${name}-hvm"
|
||||
r_desc="${description} (HVM)"
|
||||
else
|
||||
r_name="${name}"
|
||||
r_desc="${description} (PV)"
|
||||
fi
|
||||
r_amiid=$(ec2-copy-image \
|
||||
--source-region "$region" --source-ami-id "$local_amiid" \
|
||||
--name "$r_name" --description "$r_desc" --region "$r" |
|
||||
cut -f2)
|
||||
echo "AMI $virt_type copy to $r as $r_amiid in progress"
|
||||
|
||||
while ec2-describe-images "$r_amiid" --region="$r" | grep -q pending; do
|
||||
sleep 30
|
||||
done
|
||||
|
||||
if [[ -n "${GRANT_LAUNCH}" ]]; then
|
||||
echo "Granting launch permission to ${GRANT_LAUNCH} for $r_amiid in $r"
|
||||
ec2-modify-image-attribute --region="$r" "${r_amiid}" \
|
||||
--launch-permission --add "${GRANT_LAUNCH}"
|
||||
fi
|
||||
|
||||
echo "AMI $virt_type copy to $r as $r_amiid in complete"
|
||||
}
|
||||
|
||||
WAIT_PIDS=()
|
||||
for r in "${REGIONS[@]}"
|
||||
do
|
||||
[ "${r}" == "${region}" ] && continue
|
||||
do_copy "$r" pv "$AMI" &
|
||||
WAIT_PIDS+=( $! )
|
||||
done
|
||||
|
||||
# wait for each subshell individually to report errors
|
||||
WAIT_FAILED=0
|
||||
for wait_pid in "${WAIT_PIDS[@]}"; do
|
||||
if ! wait ${wait_pid}; then
|
||||
: $(( WAIT_FAILED++ ))
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${WAIT_FAILED} -ne 0 ]]; then
|
||||
echo "${WAIT_FAILED} jobs failed :(" >&2
|
||||
exit ${WAIT_FAILED}
|
||||
fi
|
||||
|
||||
WAIT_PIDS=()
|
||||
for r in "${REGIONS[@]}"
|
||||
do
|
||||
[ "${r}" == "${region}" ] && continue
|
||||
if [[ -n "$HVM" ]]; then
|
||||
do_copy "$r" hvm "$HVM" &
|
||||
WAIT_PIDS+=( $! )
|
||||
fi
|
||||
done
|
||||
|
||||
# wait for each subshell individually to report errors
|
||||
WAIT_FAILED=0
|
||||
for wait_pid in "${WAIT_PIDS[@]}"; do
|
||||
if ! wait ${wait_pid}; then
|
||||
: $(( WAIT_FAILED++ ))
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${WAIT_FAILED} -ne 0 ]]; then
|
||||
echo "${WAIT_FAILED} jobs failed :(" >&2
|
||||
exit ${WAIT_FAILED}
|
||||
fi
|
||||
|
||||
echo "Done"
|
||||
@ -1,252 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# This expects to run on an EC2 instance.
|
||||
#
|
||||
# mad props to Eric Hammond for the initial script
|
||||
# https://github.com/alestic/alestic-hardy-ebs/blob/master/bin/alestic-hardy-ebs-build-ami
|
||||
|
||||
# Set pipefail along with -e in hopes that we catch more errors
|
||||
set -e -o pipefail
|
||||
|
||||
DIR=$(dirname $0)
|
||||
source $DIR/regions.sh
|
||||
|
||||
readonly COREOS_EPOCH=1372636800
|
||||
VERSION="master"
|
||||
BOARD="amd64-usr"
|
||||
GROUP="alpha"
|
||||
IMAGE="coreos_production_ami_image.bin.bz2"
|
||||
GS_URL="gs://builds.release.core-os.net"
|
||||
IMG_URL=""
|
||||
IMG_PATH=""
|
||||
GRANT_LAUNCH=""
|
||||
USE_GPG=1
|
||||
# accepted via the environment
|
||||
: ${EC2_IMPORT_BUCKET:=}
|
||||
: ${EC2_IMPORT_ZONE:=}
|
||||
|
||||
USAGE="Usage: $0 [-V 1.2.3] [-p path/image.bz2 | -u http://foo/image.bz2]
|
||||
Options:
|
||||
-V VERSION Set the version of this AMI, default is 'master'
|
||||
-b BOARD Set to the board name, default is amd64-usr
|
||||
-g GROUP Set the update group, default is alpha or master
|
||||
-p PATH Path to compressed disk image, overrides -u
|
||||
-u URL URL to compressed disk image, derived from -V if unset.
|
||||
-s STORAGE GS URL for Google storage (used to generate URL)
|
||||
-B BUCKET S3 bucket to use for temporary storage.
|
||||
-Z ZONE EC2 availability zone to use.
|
||||
-l ACCOUNT Grant launch permission to a given AWS account ID.
|
||||
-X Disable GPG verification of downloads.
|
||||
-h this ;-)
|
||||
-v Verbose, see all the things!
|
||||
|
||||
This script must be run from an ec2 host with the ec2 tools installed.
|
||||
"
|
||||
|
||||
while getopts "V:b:g:p:u:s:t:l:B:Z:Xhv" OPTION
|
||||
do
|
||||
case $OPTION in
|
||||
V) VERSION="$OPTARG";;
|
||||
b) BOARD="$OPTARG";;
|
||||
g) GROUP="$OPTARG";;
|
||||
p) IMG_PATH="$OPTARG";;
|
||||
u) IMG_URL="$OPTARG";;
|
||||
s) GS_URL="$OPTARG";;
|
||||
B) EC2_IMPORT_BUCKET="${OPTARG}";;
|
||||
Z) EC2_IMPORT_ZONE="${OPTARG}";;
|
||||
l) GRANT_LAUNCH="${OPTARG}";;
|
||||
t) export TMPDIR="$OPTARG";;
|
||||
X) USE_GPG=0;;
|
||||
h) echo "$USAGE"; exit;;
|
||||
v) set -x;;
|
||||
*) exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $(id -u) -eq 0 ]]; then
|
||||
echo "$0: This command should not be ran run as root!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${EC2_IMPORT_BUCKET}" ]]; then
|
||||
echo "$0: -B or \$EC2_IMPORT_BUCKET must be set!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Quick sanity check that the image exists
|
||||
if [[ -n "$IMG_PATH" ]]; then
|
||||
if [[ ! -f "$IMG_PATH" ]]; then
|
||||
echo "$0: Image path does not exist: $IMG_PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
IMG_URL=$(basename "$IMG_PATH")
|
||||
else
|
||||
if [[ -z "$IMG_URL" ]]; then
|
||||
IMG_URL="$GS_URL/$GROUP/boards/$BOARD/$VERSION/$IMAGE"
|
||||
fi
|
||||
if [[ "$IMG_URL" == gs://* ]]; then
|
||||
if ! gsutil -q stat "$IMG_URL"; then
|
||||
echo "$0: Image URL unavailable: $IMG_URL" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if ! curl --fail -s --head "$IMG_URL" >/dev/null; then
|
||||
echo "$0: Image URL unavailable: $IMG_URL" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$VERSION" == "master" ]]; then
|
||||
# Come up with something more descriptive and timestamped
|
||||
TODAYS_VERSION=$(( (`date +%s` - ${COREOS_EPOCH}) / 86400 ))
|
||||
VERSION="${TODAYS_VERSION}-$(date +%H-%M)"
|
||||
GROUP="master"
|
||||
fi
|
||||
|
||||
# Size of AMI file system
|
||||
# TODO: Perhaps define size and arch in a metadata file image_to_vm creates?
|
||||
size=8 # GB
|
||||
arch=x86_64
|
||||
# The name has a limited set of allowed characterrs
|
||||
name=$(sed -e "s%[^A-Za-z0-9()\\./_-]%_%g" <<< "CoreOS-$GROUP-$VERSION")
|
||||
description="CoreOS $GROUP $VERSION"
|
||||
|
||||
if [[ -z "${EC2_IMPORT_ZONE}" ]]; then
|
||||
zoneurl=http://instance-data/latest/meta-data/placement/availability-zone
|
||||
EC2_IMPORT_ZONE=$(curl --fail -s $zoneurl)
|
||||
fi
|
||||
region=$(echo "${EC2_IMPORT_ZONE}" | sed 's/.$//')
|
||||
akiid=${ALL_AKIS[$region]}
|
||||
|
||||
if [ -z "$akiid" ]; then
|
||||
echo "$0: Can't identify AKI, using region: $region" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export EC2_URL="https://ec2.${region}.amazonaws.com"
|
||||
echo "Building AMI in zone ${EC2_IMPORT_ZONE}"
|
||||
|
||||
tmpdir=$(mktemp --directory --tmpdir=/var/tmp)
|
||||
trap "rm -rf '${tmpdir}'" EXIT
|
||||
|
||||
# if it is on the local fs, just use it, otherwise try to download it
|
||||
if [[ -z "$IMG_PATH" ]]; then
|
||||
IMG_PATH="${tmpdir}/${IMG_URL##*/}"
|
||||
if [[ "$IMG_URL" == gs://* ]]; then
|
||||
gsutil cp "$IMG_URL" "$IMG_PATH"
|
||||
if [[ "$USE_GPG" != 0 ]]; then
|
||||
gsutil cp "${IMG_URL}.sig" "${IMG_PATH}.sig"
|
||||
fi
|
||||
else
|
||||
curl --fail "$IMG_URL" > "$IMG_PATH"
|
||||
if [[ "$USE_GPG" != 0 ]]; then
|
||||
curl --fail "${IMG_URL}.sig" > "${IMG_PATH}.sig"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$USE_GPG" != 0 ]]; then
|
||||
gpg --verify "${IMG_PATH}.sig"
|
||||
fi
|
||||
|
||||
echo "Bunzipping...."
|
||||
tmpimg="${tmpdir}/img"
|
||||
bunzip2 -c "$IMG_PATH" >"${tmpimg}"
|
||||
|
||||
imgfmt=ponies
|
||||
case "$IMG_PATH" in
|
||||
*_image.bin*) imgfmt=raw;;
|
||||
*_image.vmdk*) imgfmt=vmdk;;
|
||||
*_image.vhd*) imgfmt=vhd;;
|
||||
*)
|
||||
echo "$0: Cannot guess image format from image path!"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
importid=$(ec2-import-volume "${tmpimg}" \
|
||||
-f $imgfmt -s $size -x 2 \
|
||||
-z "${EC2_IMPORT_ZONE}" \
|
||||
-b "${EC2_IMPORT_BUCKET}" \
|
||||
-o "${AWS_ACCESS_KEY}" \
|
||||
-w "${AWS_SECRET_KEY}" \
|
||||
--no-upload | awk '/IMPORTVOLUME/{print $4}')
|
||||
ec2-resume-import "${tmpimg}" \
|
||||
-t "${importid}" -x 2 \
|
||||
-o "${AWS_ACCESS_KEY}" \
|
||||
-w "${AWS_SECRET_KEY}"
|
||||
|
||||
echo "Waiting on import task ${importid}"
|
||||
importstat=$(ec2-describe-conversion-tasks "${importid}" | grep IMPORTVOLUME)
|
||||
while $(grep -qv completed <<<"${importstat}"); do
|
||||
sed -e 's/.*StatusMessage/Status:/' <<<"${importstat}"
|
||||
sleep 30
|
||||
importstat=$(ec2-describe-conversion-tasks "${importid}" | grep IMPORTVOLUME)
|
||||
done
|
||||
|
||||
volumeid=$(ec2-describe-conversion-tasks "${importid}" | \
|
||||
grep DISKIMAGE | sed -e 's%.*\(vol-[a-z0-9]*\).*%\1%')
|
||||
|
||||
while ! ec2-describe-volumes "$volumeid" | grep -q available
|
||||
do sleep 1; done
|
||||
|
||||
echo "Volume ${volumeid} ready, deleting upload from S3..."
|
||||
ec2-delete-disk-image \
|
||||
-t "${importid}" \
|
||||
-o "${AWS_ACCESS_KEY}" \
|
||||
-w "${AWS_SECRET_KEY}"
|
||||
|
||||
echo "Creating snapshot..."
|
||||
snapshotid=$(ec2-create-snapshot --description "$name" "$volumeid" | cut -f2)
|
||||
echo "Waiting on snapshot ${snapshotid}"
|
||||
while ec2-describe-snapshots "$snapshotid" | grep -q pending
|
||||
do sleep 30; done
|
||||
|
||||
echo "Created snapshot $snapshotid, deleting $volumeid"
|
||||
ec2-delete-volume "$volumeid"
|
||||
|
||||
echo "Registering hvm AMI"
|
||||
hvm_amiid=$(ec2-register \
|
||||
--name "${name}-hvm" \
|
||||
--description "$description (HVM)" \
|
||||
--architecture "$arch" \
|
||||
--virtualization-type hvm \
|
||||
--root-device-name /dev/xvda \
|
||||
--block-device-mapping /dev/xvda=$snapshotid::true \
|
||||
--sriov simple \
|
||||
--block-device-mapping /dev/xvdb=ephemeral0 |
|
||||
cut -f2)
|
||||
|
||||
echo "Registering paravirtual AMI"
|
||||
amiid=$(ec2-register \
|
||||
--name "$name" \
|
||||
--description "$description (PV)" \
|
||||
--architecture "$arch" \
|
||||
--virtualization-type paravirtual \
|
||||
--kernel "$akiid" \
|
||||
--root-device-name /dev/sda \
|
||||
--block-device-mapping /dev/sda=$snapshotid::true \
|
||||
--block-device-mapping /dev/sdb=ephemeral0 |
|
||||
cut -f2)
|
||||
|
||||
if [[ -n "${GRANT_LAUNCH}" ]]; then
|
||||
echo "Granting launch permission to ${GRANT_LAUNCH}"
|
||||
ec2-modify-image-attribute "${hvm_amiid}" \
|
||||
--launch-permission --add "${GRANT_LAUNCH}"
|
||||
ec2-modify-image-attribute "${amiid}" \
|
||||
--launch-permission --add "${GRANT_LAUNCH}"
|
||||
fi
|
||||
|
||||
cat <<EOF
|
||||
$description
|
||||
architecture: $arch
|
||||
region: $region (${EC2_IMPORT_ZONE})
|
||||
aki id: $akiid
|
||||
name: $name
|
||||
description: $description
|
||||
EBS volume: $volumeid (deleted)
|
||||
EBS snapshot: $snapshotid
|
||||
PV AMI id: $amiid
|
||||
HVM AMI id: $hvm_amiid
|
||||
EOF
|
||||
@ -1,52 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# This expects to run on an EC2 instance.
|
||||
|
||||
# Set pipefail along with -e in hopes that we catch more errors
|
||||
set -e -o pipefail
|
||||
|
||||
# accepted via the environment
|
||||
: ${EC2_IMPORT_BUCKET:=}
|
||||
: ${EC2_IMPORT_ZONE:=}
|
||||
|
||||
USAGE="Usage: $0 [-B bucket] [-Z zone]
|
||||
Options:
|
||||
-B S3 bucket to use for temporary storage.
|
||||
-Z EC2 availability zone to use.
|
||||
-h this ;-)
|
||||
-v Verbose, see all the things!
|
||||
|
||||
This script must be run from an ec2 host with the ec2 tools installed.
|
||||
"
|
||||
|
||||
while getopts "B:Z:hv" OPTION
|
||||
do
|
||||
case $OPTION in
|
||||
B) EC2_IMPORT_BUCKET="${OPTARG}";;
|
||||
Z) EC2_IMPORT_ZONE="${OPTARG}";;
|
||||
h) echo "$USAGE"; exit;;
|
||||
v) set -x;;
|
||||
*) exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $(id -u) -eq 0 ]]; then
|
||||
echo "$0: This command should not be ran run as root!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${EC2_IMPORT_BUCKET}" ]]; then
|
||||
echo "$0: -B or \$EC2_IMPORT_BUCKET must be set!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${EC2_IMPORT_ZONE}" ]]; then
|
||||
zoneurl=http://instance-data/latest/meta-data/placement/availability-zone
|
||||
EC2_IMPORT_ZONE=$(curl --fail -s $zoneurl)
|
||||
fi
|
||||
region=$(echo "${EC2_IMPORT_ZONE}" | sed 's/.$//')
|
||||
|
||||
# The AWS cli uses slightly different vars than the EC2 cli...
|
||||
export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY}"
|
||||
export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_KEY}"
|
||||
aws s3 mb "s3://${EC2_IMPORT_BUCKET}" --region "$region"
|
||||
@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
DIR=/home/ec2-user/scripts/oem/ami
|
||||
URL="https://commondatastorage.googleapis.com/storage.core-os.net/coreos/amd64-usr/master"
|
||||
|
||||
set -e
|
||||
eval $(curl -f "${URL}/version.txt")
|
||||
|
||||
source $DIR/marineam-auth.sh
|
||||
args="-b amd64-usr -g master -V ${COREOS_VERSION}"
|
||||
$DIR/import.sh ${args} -u "${URL}/coreos_production_ami_image.bin.bz2"
|
||||
$DIR/test_ami.sh -v ${args}
|
||||
#$DIR/copy_ami.sh ${args}
|
||||
@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
BOARD="amd64-usr"
|
||||
GROUP="$1"
|
||||
VER="$2"
|
||||
DIR=/home/ec2-user/scripts/oem/ami
|
||||
|
||||
if [ -z "$GROUP" -o -z "$VER" ]; then
|
||||
echo "Usage: $0 alpha 1.2.3" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
$DIR/publish_ami.sh -b $BOARD -g $GROUP -V $VER
|
||||
@ -1,23 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
BOARD="amd64-usr"
|
||||
GROUP="$1"
|
||||
VER="$2"
|
||||
DIR=/home/ec2-user/scripts/oem/ami
|
||||
|
||||
if [ -z "$GROUP" -o -z "$VER" ]; then
|
||||
echo "Usage: $0 alpha 1.2.3" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -e
|
||||
source $DIR/marineam-auth.sh
|
||||
args="-b $BOARD -g $GROUP -V $VER"
|
||||
$DIR/import.sh -l 477645798544 ${args}
|
||||
$DIR/test_ami.sh -v ${args}
|
||||
$DIR/copy_ami.sh -l 477645798544 ${args}
|
||||
|
||||
source $DIR/ami-builder-us-gov-auth.sh
|
||||
$DIR/import.sh ${args}
|
||||
|
||||
$DIR/update_json.sh ${args}
|
||||
@ -1,112 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Set pipefail along with -e in hopes that we catch more errors
|
||||
set -e -o pipefail
|
||||
|
||||
DIR=$(dirname $0)
|
||||
source $DIR/regions.sh
|
||||
|
||||
USAGE="Usage: $0 -V 100.0.0
|
||||
-V VERSION Find AMI by CoreOS version. (required)
|
||||
-b BOARD Set to the board name, default is amd64-usr
|
||||
-g GROUP Set the update group, default is alpha
|
||||
-h this ;-)
|
||||
-v Verbose, see all the things!
|
||||
|
||||
This script must be run from an ec2 host with the ec2 tools installed.
|
||||
"
|
||||
|
||||
IMAGE="coreos_production_ami"
|
||||
AMI=
|
||||
VER=
|
||||
BOARD="amd64-usr"
|
||||
GROUP="alpha"
|
||||
|
||||
clean_version() {
|
||||
sed -e 's%[^A-Za-z0-9()\\./_-]%_%g' <<< "$1"
|
||||
}
|
||||
|
||||
while getopts "V:b:g:s:hv" OPTION
|
||||
do
|
||||
case $OPTION in
|
||||
V) VER="$OPTARG";;
|
||||
b) BOARD="$OPTARG";;
|
||||
g) GROUP="$OPTARG";;
|
||||
h) echo "$USAGE"; exit;;
|
||||
v) set -x;;
|
||||
*) exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $(id -u) -eq 0 ]]; then
|
||||
echo "$0: This command should not be ran run as root!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -n "$VER" ]]; then
|
||||
echo "$0: AMI version required via -V" >&2
|
||||
echo "$USAGE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
search_name=$(clean_version "CoreOS-$GROUP-$VER")
|
||||
declare -A AMIS HVM_AMIS
|
||||
for r in "${ALL_REGIONS[@]}"; do
|
||||
# Hacky but avoids writing an indirection layer to handle auth...
|
||||
if [[ "${r}" == "us-gov-west-1" ]]; then
|
||||
source $DIR/ami-builder-us-gov-auth.sh
|
||||
else
|
||||
source $DIR/marineam-auth.sh
|
||||
fi
|
||||
|
||||
AMI=$(ec2-describe-images --region=${r} -F name="${search_name}" \
|
||||
| grep -m1 ^IMAGE | cut -f2) || true
|
||||
if [[ -z "$AMI" ]]; then
|
||||
echo "$0: Cannot find an AMI named ${search_name} in ${r}" >&2
|
||||
exit 1
|
||||
fi
|
||||
AMIS[${r}]=$AMI
|
||||
HVM=$(ec2-describe-images --region=${r} -F name="${search_name}-hvm" \
|
||||
| grep -m1 ^IMAGE | cut -f2) || true
|
||||
if [[ -z "$HVM" ]]; then
|
||||
echo "$0: Cannot find an AMI named ${search_name}-hvm in ${r}" >&2
|
||||
exit 1
|
||||
fi
|
||||
HVM_AMIS[${r}]=$HVM
|
||||
done
|
||||
|
||||
publish_ami() {
|
||||
local r="$1"
|
||||
local virt_type="$2"
|
||||
local r_amiid="$3"
|
||||
|
||||
if [[ "${r}" == "us-gov-west-1" ]]; then
|
||||
source $DIR/ami-builder-us-gov-auth.sh
|
||||
else
|
||||
source $DIR/marineam-auth.sh
|
||||
fi
|
||||
|
||||
local r_snapshotid=$(ec2-describe-images --region="$r" "$r_amiid" \
|
||||
| grep -E '^BLOCKDEVICEMAPPING.*/dev/(xv|s)da' | cut -f5) || true
|
||||
|
||||
if [[ -z "${r_snapshotid}" ]]; then
|
||||
echo "$0: Cannot find snapshot id for $r_amiid in $r" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Making $r_snapshotid in $r public"
|
||||
ec2-modify-snapshot-attribute --region "$r" \
|
||||
"$r_snapshotid" --create-volume-permission --add all
|
||||
|
||||
echo "Making $r_amiid in $r public"
|
||||
ec2-modify-image-attribute --region "$r" \
|
||||
"$r_amiid" --launch-permission -a all
|
||||
}
|
||||
|
||||
for r in "${!AMIS[@]}"; do
|
||||
publish_ami "$r" pv "${AMIS[$r]}"
|
||||
done
|
||||
|
||||
for r in "${!HVM_AMIS[@]}"; do
|
||||
publish_ami "$r" hvm "${HVM_AMIS[$r]}"
|
||||
done
|
||||
@ -1,26 +0,0 @@
|
||||
# AKI ids from:
|
||||
# http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html
|
||||
# These are pv-grub-hd0_1.04-x86_64
|
||||
|
||||
declare -A ALL_AKIS
|
||||
ALL_AKIS["us-east-1"]=aki-919dcaf8
|
||||
ALL_AKIS["us-east-2"]=aki-da055ebf
|
||||
ALL_AKIS["us-west-1"]=aki-880531cd
|
||||
ALL_AKIS["us-west-2"]=aki-fc8f11cc
|
||||
ALL_AKIS["eu-west-1"]=aki-52a34525
|
||||
ALL_AKIS["eu-west-2"]=aki-8b6369ef
|
||||
ALL_AKIS["eu-central-1"]=aki-184c7a05
|
||||
ALL_AKIS["ap-south-1"]=aki-a7305ac8
|
||||
ALL_AKIS["ap-southeast-1"]=aki-503e7402
|
||||
ALL_AKIS["ap-southeast-2"]=aki-c362fff9
|
||||
ALL_AKIS["ap-northeast-1"]=aki-176bf516
|
||||
ALL_AKIS["ap-northeast-2"]=aki-01a66b6f
|
||||
ALL_AKIS["sa-east-1"]=aki-5553f448
|
||||
ALL_AKIS["ca-central-1"]=aki-320ebd56
|
||||
|
||||
MAIN_REGIONS=( "${!ALL_AKIS[@]}" )
|
||||
|
||||
# The following are isolated regions
|
||||
ALL_AKIS["us-gov-west-1"]=aki-1de98d3e
|
||||
|
||||
ALL_REGIONS=( "${!ALL_AKIS[@]}" )
|
||||
@ -1,212 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# This expects to run on an EC2 instance.
|
||||
#
|
||||
# mad props to Eric Hammond for the initial script
|
||||
# https://github.com/alestic/alestic-hardy-ebs/blob/master/bin/alestic-hardy-ebs-build-ami
|
||||
|
||||
# This script will launch three ec2 nodes with shared user-data, and then
|
||||
# then test of the cluster is bootstrapped
|
||||
|
||||
# Set pipefail along with -e in hopes that we catch more errors
|
||||
set -e -o pipefail
|
||||
|
||||
USAGE="Usage: $0 -a ami-id
|
||||
-a ami-id ID of the AMI to be tests
|
||||
-V VERSION Find AMI by CoreOS version.
|
||||
-b BOARD Set to the board name, default is amd64-usr
|
||||
-g GROUP Set the update group, default is alpha
|
||||
-h this ;-)
|
||||
-v Verbose, see all the things!
|
||||
|
||||
The AMI to test must be specified by -a or -V.
|
||||
This script must be run from an ec2 host with the ec2 tools installed.
|
||||
"
|
||||
|
||||
AMI=
|
||||
HVM=
|
||||
VER=
|
||||
BOARD="amd64-usr"
|
||||
GROUP="alpha"
|
||||
|
||||
clean_version() {
|
||||
sed -e 's%[^A-Za-z0-9()\\./_-]%_%g' <<< "$1"
|
||||
}
|
||||
|
||||
while getopts "a:V:b:g:hv" OPTION
|
||||
do
|
||||
case $OPTION in
|
||||
a) AMI="$OPTARG";;
|
||||
V) VER="$OPTARG";;
|
||||
b) BOARD="$OPTARG";;
|
||||
g) GROUP="$OPTARG";;
|
||||
h) echo "$USAGE"; exit;;
|
||||
v) set -x;;
|
||||
*) exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $(id -u) -eq 0 ]]; then
|
||||
echo "$0: This command should not be ran run as root!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
zoneurl=http://instance-data/latest/meta-data/placement/availability-zone
|
||||
zone=$(curl --fail -s $zoneurl)
|
||||
region=$(echo $zone | sed 's/.$//')
|
||||
export EC2_URL="https://ec2.${region}.amazonaws.com"
|
||||
|
||||
if [[ -z "$AMI" && -n "$VER" ]]; then
|
||||
search_name=$(clean_version "CoreOS-$GROUP-$VER")
|
||||
AMI=$(ec2-describe-images -F name="${search_name}" | grep -m1 ^IMAGE \
|
||||
| cut -f2) || true # Don't die silently, error messages are good
|
||||
if [[ -z "$AMI" ]]; then
|
||||
echo "$0: Cannot find an AMI named $search_name" >&2
|
||||
exit 1
|
||||
fi
|
||||
HVM=$(ec2-describe-images -F name="${search_name}-hvm" \
|
||||
| grep -m1 ^IMAGE | cut -f2) || true
|
||||
if [[ -z "$HVM" ]]; then
|
||||
echo "$0: Cannot find an AMI named ${search_name}-hvm" >&2
|
||||
exit 1
|
||||
fi
|
||||
elif [[ -n "$AMI" ]]; then
|
||||
# check to make sure this is a valid image
|
||||
if ! ec2-describe-images -F image-id="$AMI" | grep -q "$AMI"; then
|
||||
echo "$0: Unknown image: $AMI" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "$0: AMI id or version required (-a or -V options)" >&2
|
||||
echo "$USAGE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -n "Creating keys and security group... "
|
||||
key_name="autotest-`date +%s`"
|
||||
key_file="/tmp/$key_name"
|
||||
ec2-create-keypair $key_name | grep -v KEYPAIR > $key_file
|
||||
chmod 600 $key_file
|
||||
|
||||
sg_name=$key_name
|
||||
sg=$(ec2-create-group $sg_name --description "$sg_name" | cut -f2)
|
||||
ec2-authorize "$sg_name" -P tcp -p 4001 > /dev/null
|
||||
ec2-authorize "$sg_name" -P tcp -p 7001 > /dev/null
|
||||
ec2-authorize "$sg_name" -P tcp -p 22 > /dev/null
|
||||
echo "OK ($key_name)"
|
||||
|
||||
discovery=$(curl --fail -s https://discovery.etcd.io/new)
|
||||
userdata="#cloud-config
|
||||
|
||||
coreos:
|
||||
etcd:
|
||||
discovery: $discovery
|
||||
addr: \$public_ipv4:4001
|
||||
peer-addr: \$public_ipv4:7001
|
||||
units:
|
||||
- name: etcd.service
|
||||
command: start
|
||||
- name: fleet.service
|
||||
command: start
|
||||
"
|
||||
|
||||
echo -n "Booting instances... "
|
||||
# Add in 1 HVM instance if available.
|
||||
if [[ -z "$HVM" ]]; then
|
||||
instances=$(ec2-run-instances \
|
||||
--user-data "$userdata" \
|
||||
--instance-type "t1.micro" \
|
||||
--instance-count 3 \
|
||||
--group "$sg_name" \
|
||||
--key "$key_name" $AMI | \
|
||||
grep INSTANCE | cut -f2)
|
||||
else
|
||||
instances=$(ec2-run-instances \
|
||||
--user-data "$userdata" \
|
||||
--instance-type "t1.micro" \
|
||||
--instance-count 2 \
|
||||
--group "$sg_name" \
|
||||
--key "$key_name" $AMI | \
|
||||
grep INSTANCE | cut -f2)
|
||||
instances+=" "
|
||||
instances+=$(ec2-run-instances \
|
||||
--user-data "$userdata" \
|
||||
--instance-type "m3.medium" \
|
||||
--instance-count 1 \
|
||||
--group "$sg_name" \
|
||||
--key "$key_name" $HVM | \
|
||||
grep INSTANCE | cut -f2)
|
||||
fi
|
||||
# little hack to create a describe instances command that only
|
||||
# pulls data for these instances
|
||||
ec2_cmd=$(echo $instances | sed 's/ / --filter instance-id=/g')
|
||||
ec2_cmd="ec2-describe-instances --filter instance-id=$ec2_cmd"
|
||||
|
||||
while $ec2_cmd | grep INSTANCE | grep -q pending
|
||||
do sleep 10; done
|
||||
|
||||
declare -a ips=($($ec2_cmd | grep INSTANCE | cut -f4))
|
||||
|
||||
# sleep until all the sockets we need come up
|
||||
for host in ${ips[@]}; do
|
||||
for port in 22 4001 7001; do
|
||||
timeout 600 perl -MIO::Socket::INET -e "
|
||||
until(new IO::Socket::INET('$host:$port')){sleep 1}"
|
||||
done
|
||||
done
|
||||
echo "OK ($instances)"
|
||||
|
||||
echo "Letting etcd settle..."
|
||||
sleep 10
|
||||
|
||||
echo "Running coretest..."
|
||||
for host in ${ips[@]}; do
|
||||
if ! ssh -i "$key_file" -l core -o StrictHostKeyChecking=no "$host" \
|
||||
coretest -test.v=true -test.parallel=8
|
||||
then
|
||||
echo "coretest failed for $host" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "OK"
|
||||
|
||||
echo -n "Testing etcd... "
|
||||
test_key="v2/keys/test"
|
||||
token=$(uuidgen)
|
||||
# XXX: the sleep *should never* be required, this is a bug in etcd
|
||||
sleep 5
|
||||
curl --fail -s -L "${ips[0]}:4001/$test_key" -d value="$token" > /dev/null
|
||||
sleep 5
|
||||
for host in ${ips[@]}; do
|
||||
if ! curl --fail -s -L "${host}:4001/$test_key" | grep -q $token; then
|
||||
echo "etcd bootstrap appears to have failed for $host" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "OK"
|
||||
|
||||
echo "Checking disk GUID... "
|
||||
for host in ${ips[@]}; do
|
||||
if ! ssh -i "$key_file" -l core -o StrictHostKeyChecking=no "$host" \
|
||||
sudo sgdisk --print /dev/xvda | \
|
||||
grep "^Disk identifier" | \
|
||||
grep -v 00000000-0000-0000-0000-000000000001
|
||||
then
|
||||
echo "disk guid unset on $host" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "OK"
|
||||
|
||||
|
||||
echo -n "Cleaning up environment... "
|
||||
ec2-terminate-instances $instances > /dev/null
|
||||
while ! $ec2_cmd | grep INSTANCE | grep -q terminated
|
||||
do sleep 10; done
|
||||
|
||||
# The security group may take a little longer to free up
|
||||
while ! ec2-delete-group $sg_name > /dev/null
|
||||
do sleep 10; done
|
||||
ec2-delete-keypair $key_name > /dev/null
|
||||
rm $key_file
|
||||
echo "OK"
|
||||
@ -1,134 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Set pipefail along with -e in hopes that we catch more errors
|
||||
set -e -o pipefail
|
||||
|
||||
DIR=$(dirname $0)
|
||||
source $DIR/regions.sh
|
||||
|
||||
USAGE="Usage: $0 -V 100.0.0
|
||||
-V VERSION Find AMI by CoreOS version. (required)
|
||||
-b BOARD Set to the board name, default is amd64-usr
|
||||
-g GROUP Set the update group, default is alpha
|
||||
-s STORAGE GS URL for Google storage to upload to.
|
||||
-h this ;-)
|
||||
-v Verbose, see all the things!
|
||||
|
||||
This script must be run from an ec2 host with the ec2 tools installed.
|
||||
"
|
||||
|
||||
IMAGE="coreos_production_ami"
|
||||
GS_URL="gs://builds.release.core-os.net"
|
||||
AMI=
|
||||
VER=
|
||||
BOARD="amd64-usr"
|
||||
GROUP="alpha"
|
||||
|
||||
clean_version() {
|
||||
sed -e 's%[^A-Za-z0-9()\\./_-]%_%g' <<< "$1"
|
||||
}
|
||||
|
||||
while getopts "V:b:g:s:hv" OPTION
|
||||
do
|
||||
case $OPTION in
|
||||
V) VER="$OPTARG";;
|
||||
b) BOARD="$OPTARG";;
|
||||
g) GROUP="$OPTARG";;
|
||||
s) GS_URL="$OPTARG";;
|
||||
h) echo "$USAGE"; exit;;
|
||||
v) set -x;;
|
||||
*) exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $(id -u) -eq 0 ]]; then
|
||||
echo "$0: This command should not be ran run as root!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -n "$VER" ]]; then
|
||||
echo "$0: AMI version required via -V" >&2
|
||||
echo "$USAGE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
search_name=$(clean_version "CoreOS-$GROUP-$VER")
|
||||
declare -A AMIS HVM_AMIS
|
||||
for r in "${ALL_REGIONS[@]}"; do
|
||||
# Hacky but avoids writing an indirection layer to handle auth...
|
||||
if [[ "${r}" == "us-gov-west-1" ]]; then
|
||||
source $DIR/ami-builder-us-gov-auth.sh
|
||||
else
|
||||
source $DIR/marineam-auth.sh
|
||||
fi
|
||||
|
||||
AMI=$(ec2-describe-images --region=${r} -F name="${search_name}" \
|
||||
| grep -m1 ^IMAGE | cut -f2) || true
|
||||
if [[ -z "$AMI" ]]; then
|
||||
echo "$0: Cannot find an AMI named ${search_name} in ${r}" >&2
|
||||
exit 1
|
||||
fi
|
||||
AMIS[${r}]=$AMI
|
||||
HVM=$(ec2-describe-images --region=${r} -F name="${search_name}-hvm" \
|
||||
| grep -m1 ^IMAGE | cut -f2) || true
|
||||
if [[ -z "$HVM" ]]; then
|
||||
echo "$0: Cannot find an AMI named ${search_name}-hvm in ${r}" >&2
|
||||
exit 1
|
||||
fi
|
||||
HVM_AMIS[${r}]=$HVM
|
||||
done
|
||||
|
||||
# ignore this crap: /usr/lib64/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
|
||||
upload_file() {
|
||||
local name="$1"
|
||||
local content="$2"
|
||||
url="$GS_URL/$GROUP/boards/$BOARD/$VER/${IMAGE}_${name}"
|
||||
echo -e "$content" \
|
||||
| python -W "ignore:Not using mpz_powm_sec" \
|
||||
`which gsutil` cp - "$url"
|
||||
echo "OK, ${url}=${content}"
|
||||
}
|
||||
|
||||
publish_ami() {
|
||||
local r="$1"
|
||||
local virt_type="$2"
|
||||
local r_amiid="$3"
|
||||
|
||||
# compatibility name from before addition of hvm
|
||||
if [[ "${virt_type}" == "pv" ]]; then
|
||||
upload_file "${r}.txt" "$r_amiid"
|
||||
fi
|
||||
|
||||
upload_file "${virt_type}_${r}.txt" "$r_amiid"
|
||||
}
|
||||
|
||||
PV_ALL=""
|
||||
for r in "${!AMIS[@]}"; do
|
||||
publish_ami "$r" pv "${AMIS[$r]}"
|
||||
PV_ALL+="|${r}=${AMIS[$r]}"
|
||||
done
|
||||
PV_ALL="${PV_ALL#|}"
|
||||
|
||||
HVM_ALL=""
|
||||
for r in "${!HVM_AMIS[@]}"; do
|
||||
publish_ami "$r" hvm "${HVM_AMIS[$r]}"
|
||||
HVM_ALL+="|${r}=${HVM_AMIS[$r]}"
|
||||
done
|
||||
HVM_ALL="${HVM_ALL#|}"
|
||||
|
||||
AMI_ALL="{\n \"amis\": ["
|
||||
for r in "${ALL_REGIONS[@]}"; do
|
||||
AMI_ALL+="\n {"
|
||||
AMI_ALL+="\n \"name\": \"${r}\","
|
||||
AMI_ALL+="\n \"pv\": \"${AMIS[$r]}\","
|
||||
AMI_ALL+="\n \"hvm\": \"${HVM_AMIS[$r]}\""
|
||||
AMI_ALL+="\n },"
|
||||
done
|
||||
AMI_ALL="${AMI_ALL%,}"
|
||||
AMI_ALL+="\n ]\n}"
|
||||
|
||||
upload_file "all.txt" "${PV_ALL}"
|
||||
upload_file "pv.txt" "${PV_ALL}"
|
||||
upload_file "hvm.txt" "${HVM_ALL}"
|
||||
upload_file "all.json" "${AMI_ALL}"
|
||||
echo "Done"
|
||||
@ -1,16 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
DIR=/home/ec2-user/scripts/oem/ami
|
||||
USER=someone
|
||||
TYPE=production
|
||||
VERSION="367.0.0+2014-07-10-1613"
|
||||
URL="http://users.developer.core-os.net/${USER}/boards/amd64-usr/${VERSION}"
|
||||
|
||||
set -e
|
||||
eval $(curl -f "${URL}/version.txt")
|
||||
|
||||
source $DIR/marineam-auth.sh
|
||||
args="-b amd64-usr -g ${USER} -V ${VERSION}"
|
||||
$DIR/import.sh ${args} -u "${URL}/coreos_${TYPE}_ami_image.bin.bz2"
|
||||
$DIR/test_ami.sh -v ${args}
|
||||
#$DIR/copy_ami.sh ${args}
|
||||
Loading…
x
Reference in New Issue
Block a user