From 4c4e26d996c4abced1c0edab9e343851a94f3fcb Mon Sep 17 00:00:00 2001 From: Juan Abia Date: Wed, 3 Nov 2021 16:36:18 +0100 Subject: [PATCH] test/cases: use the same naming pattern on every test make api.sh and was.sh use the same naming pattern, TEST_ID. --- test/cases/api.sh | 11 +++++++++-- test/cases/aws.sh | 45 ++++++++++++++++++++++++++++++++------------- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/test/cases/api.sh b/test/cases/api.sh index cdd6c2284..2bae8e1ca 100755 --- a/test/cases/api.sh +++ b/test/cases/api.sh @@ -460,7 +460,7 @@ fi ssh-keygen -t rsa-sha2-512 -f /tmp/usertest -C "usertest" -N "" function createReqFileAWS() { - AWS_SNAPSHOT_NAME=$(uuidgen) + AWS_SNAPSHOT_NAME=${TEST_ID} cat > "$REQUEST_FILE" << EOF { @@ -860,6 +860,13 @@ function verifyInAWS() { AMI_IMAGE_ID=$(jq -r '.Images[].ImageId' "$WORKDIR/ami.json") AWS_SNAPSHOT_ID=$(jq -r '.Images[].BlockDeviceMappings[].Ebs.SnapshotId' "$WORKDIR/ami.json") + + # Tag image and snapshot with "gitlab-ci-test" tag + $AWS_CMD ec2 create-tags \ + --resources "${AWS_SNAPSHOT_ID}" "${AMI_IMAGE_ID}" \ + --tags Key=gitlab-ci-test,Value=true + + SHARE_OK=1 # Verify that the ec2 snapshot was shared @@ -888,7 +895,7 @@ function verifyInAWS() { chmod 400 ./keypair.pem # Create an instance based on the ami - $AWS_CMD ec2 run-instances --image-id "$AMI_IMAGE_ID" --count 1 --instance-type t2.micro --key-name "key-for-$AMI_IMAGE_ID" > "$WORKDIR/instances.json" + $AWS_CMD ec2 run-instances --image-id "$AMI_IMAGE_ID" --count 1 --instance-type t2.micro --key-name "key-for-$AMI_IMAGE_ID" --tag-specifications 'ResourceType=instance,Tags=[{Key=gitlab-ci-test,Value=true}]' > "$WORKDIR/instances.json" AWS_INSTANCE_ID=$(jq -r '.Instances[].InstanceId' "$WORKDIR/instances.json") $AWS_CMD ec2 wait instance-running --instance-ids "$AWS_INSTANCE_ID" diff --git a/test/cases/aws.sh b/test/cases/aws.sh index 7365e60cd..21913a983 100755 --- a/test/cases/aws.sh +++ b/test/cases/aws.sh @@ -39,8 +39,18 @@ function cleanup() { } trap cleanup EXIT -TEST_UUID=$(uuidgen) -IMAGE_KEY=osbuild-composer-aws-test-${TEST_UUID} +# Generate a string, which can be used as a predictable resource name, +# especially when running the test in CI where we may need to clean up +# resources in case the test unexpectedly fails or is canceled +CI="${CI:-false}" +if [[ "$CI" == true ]]; then + # in CI, imitate GenerateCIArtifactName() from internal/test/helpers.go + TEST_ID="$DISTRO_CODE-$ARCH-$CI_COMMIT_BRANCH-$CI_BUILD_ID" +else + # if not running in Jenkins, generate ID not relying on specific env variables + TEST_ID=$(uuidgen); +fi + # Jenkins sets WORKSPACE to the job workspace, but if this script runs # outside of Jenkins, we can set up a temporary directory instead. @@ -52,11 +62,11 @@ fi AWS_CONFIG=${TEMPDIR}/aws.toml BLUEPRINT_FILE=${TEMPDIR}/blueprint.toml AWS_INSTANCE_JSON=${TEMPDIR}/aws-instance.json -COMPOSE_START=${TEMPDIR}/compose-start-${IMAGE_KEY}.json -COMPOSE_INFO=${TEMPDIR}/compose-info-${IMAGE_KEY}.json -AMI_DATA=${TEMPDIR}/ami-data-${IMAGE_KEY}.json -INSTANCE_DATA=${TEMPDIR}/instance-data-${IMAGE_KEY}.json -INSTANCE_CONSOLE=${TEMPDIR}/instance-console-${IMAGE_KEY}.json +COMPOSE_START=${TEMPDIR}/compose-start-${TEST_ID}.json +COMPOSE_INFO=${TEMPDIR}/compose-info-${TEST_ID}.json +AMI_DATA=${TEMPDIR}/ami-data-${TEST_ID}.json +INSTANCE_DATA=${TEMPDIR}/instance-data-${TEST_ID}.json +INSTANCE_CONSOLE=${TEMPDIR}/instance-console-${TEST_ID}.json SSH_DATA_DIR=$(/usr/libexec/osbuild-composer-test/gen-ssh.sh) SSH_KEY=${SSH_DATA_DIR}/id_rsa @@ -142,7 +152,7 @@ accessKeyID = "${V2_AWS_ACCESS_KEY_ID}" secretAccessKey = "${V2_AWS_SECRET_ACCESS_KEY}" bucket = "${AWS_BUCKET}" region = "${AWS_REGION}" -key = "${IMAGE_KEY}" +key = "${TEST_ID}" EOF # Write a basic blueprint for our image. @@ -172,7 +182,7 @@ trap 'sudo pkill -P ${WORKER_JOURNAL_PID}' EXIT # Start the compose and upload to AWS. greenprint "๐Ÿš€ Starting compose" -sudo composer-cli --json compose start bash ami "$IMAGE_KEY" "$AWS_CONFIG" | tee "$COMPOSE_START" +sudo composer-cli --json compose start bash ami "$TEST_ID" "$AWS_CONFIG" | tee "$COMPOSE_START" COMPOSE_ID=$(get_build_info ".build_id" "$COMPOSE_START") # Wait for the compose to finish. @@ -209,10 +219,16 @@ fi greenprint "๐Ÿ” Search for created AMI" $AWS_CMD ec2 describe-images \ --owners self \ - --filters Name=name,Values="${IMAGE_KEY}" \ + --filters Name=name,Values="${TEST_ID}" \ | tee "$AMI_DATA" > /dev/null AMI_IMAGE_ID=$(jq -r '.Images[].ImageId' "$AMI_DATA") +SNAPSHOT_ID=$(jq -r '.Images[].BlockDeviceMappings[].Ebs.SnapshotId' "$AMI_DATA") + +# Tag image and snapshot with "gitlab-ci-test" tag +$AWS_CMD ec2 create-tags \ + --resources "${SNAPSHOT_ID}" "${AMI_IMAGE_ID}" \ + --tags Key=gitlab-ci-test,Value=true # NOTE(mhayden): Getting TagSpecifications to play along with bash's # parsing of curly braces and square brackets is nuts, so we just write some @@ -225,7 +241,11 @@ tee "$AWS_INSTANCE_JSON" > /dev/null << EOF "Tags": [ { "Key": "Name", - "Value": "${IMAGE_KEY}" + "Value": "${TEST_ID}" + }, + { + "Key": "gitlab-ci-test", + "Value": "true" } ] } @@ -297,13 +317,12 @@ done # Ensure the image was properly tagged. IMAGE_TAG=$($AWS_CMD ec2 describe-images --image-ids "${AMI_IMAGE_ID}" | jq -r '.Images[0].Tags[] | select(.Key=="Name") | .Value') -if [[ ! $IMAGE_TAG == "${IMAGE_KEY}" ]]; then +if [[ ! $IMAGE_TAG == "${TEST_ID}" ]]; then RESULTS=0 fi # Clean up our mess. greenprint "๐Ÿงผ Cleaning up" -SNAPSHOT_ID=$(jq -r '.Images[].BlockDeviceMappings[].Ebs.SnapshotId' "$AMI_DATA") $AWS_CMD ec2 terminate-instances --instance-id "${INSTANCE_ID}" $AWS_CMD ec2 deregister-image --image-id "${AMI_IMAGE_ID}" $AWS_CMD ec2 delete-snapshot --snapshot-id "${SNAPSHOT_ID}"