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"