From df74343eb8497849570ddde45f38ea6c9e523879 Mon Sep 17 00:00:00 2001 From: Xiaofeng Wang Date: Fri, 26 Mar 2021 11:09:29 +0800 Subject: [PATCH] test: Update test to align with customer scenario According to Ben's suggestion, test has been updated to aligin with customer scenario. 1. Setup ostree prod repo, building installer and edge upgrade will be from prod repo 2. Containers for building installer and edge upgrade will be running as stage repo 3. Before edge system update, prod repo will pull update content from stage repo, make static-delta and summary --- test/cases/ostree-ng.sh | 80 ++++++++++++++++++++++++++++++----------- 1 file changed, 60 insertions(+), 20 deletions(-) diff --git a/test/cases/ostree-ng.sh b/test/cases/ostree-ng.sh index 8493f8226..783cbb4dc 100755 --- a/test/cases/ostree-ng.sh +++ b/test/cases/ostree-ng.sh @@ -8,9 +8,6 @@ set -euo pipefail source /etc/os-release ARCH=$(uname -m) -# Do not use httpd, but container -sudo systemctl disable --now httpd - # Colorful output. function greenprint { echo -e "\033[1;32m${1}\033[0m" @@ -65,7 +62,10 @@ OS_VARIANT="rhel8-unknown" TEST_UUID=$(uuidgen) IMAGE_KEY="osbuild-composer-ostree-test-${TEST_UUID}" GUEST_ADDRESS=192.168.100.50 -URL=http://192.168.100.1/repo +PROD_REPO_URL=http://192.168.100.1/repo +PROD_REPO=/var/www/html/repo +STAGE_REPO_ADDRESS=192.168.200.1 +STAGE_REPO_URL="http://${STAGE_REPO_ADDRESS}/repo/" # Set up temporary files. TEMPDIR=$(mktemp -d) @@ -181,8 +181,14 @@ clean_up () { # Remove all images sudo podman rmi -f -a + # Remove prod repo + sudo rm -rf "$PROD_REPO" + # Remomve tmp dir. sudo rm -rf "$TEMPDIR" + + # Stop prod repo http service + sudo systemctl disable --now httpd } # Test result checking @@ -197,6 +203,25 @@ check_result () { fi } +########################################################### +## +## Prepare edge prod and stage repo +## +########################################################### +greenprint "๐Ÿ”ง Prepare edge prod repo" +# Start prod repo web service +sudo systemctl enable --now httpd.service + +# Have a clean prod repo +sudo rm -rf "$PROD_REPO" +sudo mkdir -p "$PROD_REPO" +sudo ostree --repo="$PROD_REPO" init --mode=archive +sudo ostree --repo="$PROD_REPO" remote add --no-gpg-verify edge-stage "$STAGE_REPO_URL" + +# Prepare stage repo network +greenprint "๐Ÿ”ง Prepare stage repo network" +sudo podman network inspect edge >/dev/null 2>&1 || sudo podman network create --driver=bridge --subnet=192.168.200.0/24 --ip-range=192.168.200.0/24 --gateway=192.168.200.254 edge + ########################################################## ## ## rhel-edge container image for building installer image @@ -242,28 +267,35 @@ build_image container rhel-edge-container greenprint "๐Ÿ“ฅ Downloading the container image" sudo composer-cli compose image "${COMPOSE_ID}" > /dev/null -# Clear container running env -greenprint "๐Ÿงน Clearing container running env" +# Clear stage repo running env +greenprint "๐Ÿงน Clearing stage repo running env" # Remove any status containers if exist sudo podman ps -a -q --format "{{.ID}}" | sudo xargs --no-run-if-empty podman rm -f # Remove all images sudo podman rmi -f -a -# Deal with rhel-edge container -greenprint "๐Ÿ—œ Extracting and running the image" +# Deal with stage repo image +greenprint "๐Ÿ—œ Extracting image" IMAGE_FILENAME="${COMPOSE_ID}-rhel84-container.tar" sudo podman pull "oci-archive:${IMAGE_FILENAME}" sudo podman images # Clear image file sudo rm -f "$IMAGE_FILENAME" + +# Run edge stage repo +greenprint "๐Ÿ›ฐ Running edge stage repo" # Get image id to run image EDGE_IMAGE_ID=$(sudo podman images --filter "dangling=true" --format "{{.ID}}") -sudo podman run -d --name rhel-edge --network host "${EDGE_IMAGE_ID}" +sudo podman run -d --name rhel-edge --network edge --ip "$STAGE_REPO_ADDRESS" "$EDGE_IMAGE_ID" # Wait for container to be running until [ "$(sudo podman inspect -f '{{.State.Running}}' rhel-edge)" == "true" ]; do sleep 1; done; +# Sync installer edge content +greenprint "๐Ÿ“ก Sync installer content from stage repo" +sudo ostree --repo="$PROD_REPO" pull --mirror edge-stage "$OSTREE_REF" + # Clean compose and blueprints. greenprint "๐Ÿงฝ Clean up container blueprint and compose" sudo composer-cli compose delete "${COMPOSE_ID}" > /dev/null @@ -294,7 +326,7 @@ sudo composer-cli blueprints depsolve installer # Build installer image. # Test --url arg following by URL with tailling slash for bz#1942029 -build_image installer rhel-edge-installer "${URL}/" +build_image installer rhel-edge-installer "${PROD_REPO_URL}/" # Download the image greenprint "๐Ÿ“ฅ Downloading the installer image" @@ -404,7 +436,7 @@ check_result ################################################## ## -## upgrade rhel-edge with new upgrade container +## upgrade rhel-edge with new upgrade commit ## ################################################## @@ -445,38 +477,46 @@ sudo composer-cli blueprints push "$BLUEPRINT_FILE" sudo composer-cli blueprints depsolve upgrade # Build upgrade image. -# Test --url arg following by URL without tailling slash for bz#1942029 -build_image upgrade rhel-edge-container "$URL" +build_image upgrade rhel-edge-container "$PROD_REPO_URL" # Download the image greenprint "๐Ÿ“ฅ Downloading the upgrade image" sudo composer-cli compose image "${COMPOSE_ID}" > /dev/null -# Clear container running env -greenprint "๐Ÿงน Clearing container running env" +# Clear stage repo running env +greenprint "๐Ÿงน Clearing stage repo running env" # Remove any status containers if exist sudo podman ps -a -q --format "{{.ID}}" | sudo xargs --no-run-if-empty podman rm -f # Remove all images sudo podman rmi -f -a -# Deal with rhel-edge container -greenprint "๐Ÿ—œ Extracting and running the image" +# Deal with stage repo container +greenprint "๐Ÿ—œ Extracting image" IMAGE_FILENAME="${COMPOSE_ID}-rhel84-container.tar" sudo podman pull "oci-archive:${IMAGE_FILENAME}" sudo podman images # Clear image file sudo rm -f "$IMAGE_FILENAME" + +# Run edge stage repo +greenprint "๐Ÿ›ฐ Running edge stage repo" # Get image id to run image EDGE_IMAGE_ID=$(sudo podman images --filter "dangling=true" --format "{{.ID}}") -sudo podman run -d --name rhel-edge --network host "${EDGE_IMAGE_ID}" +sudo podman run -d --name rhel-edge --network edge --ip "$STAGE_REPO_ADDRESS" "$EDGE_IMAGE_ID" # Wait for container to be running until [ "$(sudo podman inspect -f '{{.State.Running}}' rhel-edge)" == "true" ]; do sleep 1; done; +# Pull upgrade to prod mirror +greenprint "โ›“ Pull upgrade to prod mirror" +sudo ostree --repo="$PROD_REPO" pull --mirror edge-stage "$OSTREE_REF" +sudo ostree --repo="$PROD_REPO" static-delta generate "$OSTREE_REF" +sudo ostree --repo="$PROD_REPO" summary -u + # Get ostree commit value. greenprint "๐Ÿ•น Get ostree upgrade commit value" -UPGRADE_HASH=$(curl ${URL}/refs/heads/"${OSTREE_REF}") +UPGRADE_HASH=$(curl "${PROD_REPO_URL}/refs/heads/${OSTREE_REF}") # Clean compose and blueprints. greenprint "๐Ÿงฝ Clean up upgrade blueprint and compose" @@ -486,7 +526,7 @@ sudo composer-cli blueprints delete upgrade > /dev/null # Config remote repository for upgrade greenprint "๐Ÿ”— Config remote repository for upgrade" sudo ssh "${SSH_OPTIONS[@]}" -i "${SSH_KEY}" admin@${GUEST_ADDRESS} 'sudo ostree remote delete rhel-edge' -sudo ssh "${SSH_OPTIONS[@]}" -i "${SSH_KEY}" admin@${GUEST_ADDRESS} "sudo ostree remote add --no-gpg-verify --no-sign-verify rhel-edge ${URL}" +sudo ssh "${SSH_OPTIONS[@]}" -i "${SSH_KEY}" admin@${GUEST_ADDRESS} "sudo ostree remote add --no-gpg-verify --no-sign-verify rhel-edge ${PROD_REPO_URL}" # Upgrade image/commit. greenprint "๐Ÿ—ณ Upgrade ostree image/commit"