blob: 33a0b4b642aa3a570a9de15fa023dee70657fe1e [file] [log] [blame]
#!/bin/bash
XFSTESTS_FLAVOR=gce
DIR=..
if test -n "$GCE_XFSTESTS_DIR"
then
DIR="$GCE_XFSTESTS_DIR"
else
DIR="$(dirname "$(dirname "$0")")"
fi
. "$DIR/util/get-config"
if test -z "$GS_BUCKET" -o -z "$GCE_PROJECT" -o -z "$GCE_ZONE"
then
echo "You must configure GS_BUCKET, GCE_PROJECT, and GCE_ZONE in"
echo "your config file"
exit 1
fi
GS_RW=https://www.googleapis.com/auth/devstorage.read_write
GS_RO=https://www.googleapis.com/auth/devstorage.read_only
LOG_WR=https://www.googleapis.com/auth/logging.write
COMPUTE_RW=https://www.googleapis.com/auth/compute
DATECODE=$(date +%Y%m%d%H%M)
SCOPES="$GS_RW,$LOG_WR,$COMPUTE_RW"
DATECODE=$(date +%Y%m%d%H%M)
EXP_INST="xfstests-exp-$DATECODE"
EXP_DISK="xfstests-exp-$DATECODE"
IMG_DISK="xfstests-img-$DATECODE"
TMP_DISK="xfstests-tmp-$DATECODE"
DEB_IMAGE_FAMILY=debian-9
DEB_IMAGE_PROJECT=debian-cloud
NOACTION=
if ! test -f $TARBALL ; then
echo $TARBALL does not exist!
exit 1
fi
while [ "$1" != "" ];
do
case $1 in
-F) shift
ROOT_FS="$1"
IMAGE_FLAG="--image-family"
;;
-I) shift
ROOT_FS="$1"
IMAGE_FLAG="--image"
;;
-D) shift
IMG_DISK="$1";
ROOT_FS=""
IMAGE_FLAG=""
;;
-o) shift
GS_TAR="$1";
;;
--project) shift
GCE_IMAGE_PROJECT="$1"
;;
--skip-uuid) SKIP_UUID="yes" ;;
--debug) DO_DEBUG="yes" ;;
--no-action) NOACTION="echo" ;;
*)
echo "unknown option: $1"
exit 1
;;
esac
shift
done
GS_SCRIPT=gs://$GS_BUCKET/gce-export.sh
METADATA="startup-script-url=$GS_SCRIPT"
GCE_MACHTYPE=n1-highmem-4
if test -z "$GCE_IMAGE_PROJECT" ; then
if test -z "$ROOT_FS" ; then
GCE_IMAGE_PROJECT="$GCE_PROJECT"
else
GCE_IMAGE_PROJECT="xfstests-cloud"
fi
fi
format="--format=flattened(name,creationTimestamp,archiveSizeBytes)"
echo "Exporting from project $GCE_IMAGE_PROJECT:"
if test "$IMAGE_FLAG" = "--image-family" ; then
GS_TAR="${GS_TAR:-gs://$GS_BUCKET/$ROOT_FS.image.tar.gz}"
run_gcloud_prj compute --project "$GCE_IMAGE_PROJECT" images \
describe-from-family "$ROOT_FS" $format
elif test "$IMAGE_FLAG" = "--image" ; then
GS_TAR="${GS_TAR:-gs://$GS_BUCKET/$ROOT_FS.image.tar.gz}"
run_gcloud_prj compute --project "$GCE_IMAGE_PROJECT" images \
describe "$ROOT_FS" $format
else
GS_TAR="${GS_TAR:-gs://$GS_BUCKET/$IMG_DISK.image.tar.gz}"
run_gcloud_prj compute --project "$GCE_IMAGE_PROJECT" disks \
describe "$IMG_DISK" $format
fi
if test "$?" -gt 0 ; then
exit 1
fi
t=$(mktemp /tmp/gce-export.XXXXXXXX)
sed -e "s/@BUCKET@/$GS_BUCKET/" \
-e "s;@GS_TAR@;$GS_TAR;" \
-e "s;@GCE_ZONE@;$GCE_ZONE;" \
-e "s;@GCE_IMAGE_PROJECT@;$GCE_IMAGE_PROJECT;" \
-e "s;@GCE_PROJECT@;$GCE_PROJECT;" \
-e "s;@IMAGE_FLAG@;$IMAGE_FLAG;" \
-e "s;@ROOT_FS@;$ROOT_FS;" \
-e "s;@SKIP_UUID@;$SKIP_UUID;" \
-e "s;@IMG_DISK@;$IMG_DISK;" \
-e "s/@EXP_INST@/$EXP_INST/" \
< "$(dirname "$DIR")/util/gce-export.sh" > $t
if test -n "$DO_DEBUG" ; then
echo "Script file left in $t"
exit 0
fi
gsutil cp $t $GS_SCRIPT
/bin/rm -f $t
NO_ACTION="$NOACTION"
run_gcloud compute -q instances delete "$EXP_INST" \
--zone "$GCE_ZONE" 2> /dev/null
run_gcloud compute -q disks delete "$EXP_DISK" \
--zone "$GCE_ZONE" 2> /dev/null
run_gcloud compute -q disks delete "$IMG_DISK" \
--zone "$GCE_ZONE" 2> /dev/null
run_gcloud compute instances create "$EXP_INST" \
--zone "$GCE_ZONE" --machine-type $GCE_MACHTYPE --network "$GCE_NETWORK" \
--maintenance-policy "MIGRATE" --scopes "$SCOPES" \
$SERVICE_ACCOUNT_OPT_IMG --metadata "^ ^$METADATA" \
--image-family "$DEB_IMAGE_FAMILY" --image-project "$DEB_IMAGE_PROJECT" \
--boot-disk-type "pd-standard" --boot-disk-device-name "$EXP_DISK"
echo "Image export will be to: $GS_TAR"
if test -n "$NO_ACTION" ; then
exit 0
fi
echo -n "Waiting for creation image export"
cnt=0
while run_gcloud compute instances \
describe "$EXP_INST" --zone $GCE_ZONE >& /dev/null
do
let cnt=$cnt+1
if test $cnt -ge 10
then
echo -n "."
cnt=0
fi
sleep 1
done
echo " Done!"