Skip to content

Commit 9a04668

Browse files
committed
WIP: Add support for passing pre-mirrored images to appliance
- Add AGENT_OVE_BUILD_METHOD to control OVE ISO build method (script vs container) - Prepare registry directory structure for appliance in 04_agent_prepare_release.sh - Update 06_agent_create_cluster.sh to support both build methods - Both methods now extract agent-iso-builder source and pass mirror-path arguments 🤖 Generated with [Claude Code](https://claude.com/claude-code) Assisted-by: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 5901c75 commit 9a04668

3 files changed

Lines changed: 82 additions & 23 deletions

File tree

agent/04_agent_prepare_release.sh

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,46 @@ source $SCRIPTDIR/agent/common.sh
1313
source $SCRIPTDIR/ocp_install_env.sh
1414
source $SCRIPTDIR/oc_mirror.sh
1515

16-
# Temporarily skip preparing the custom local release in case of OVE ISO
17-
if [[ "${AGENT_E2E_TEST_BOOT_MODE}" == "ISO_NO_REGISTRY" ]]; then
18-
exit 0
16+
early_deploy_validation
17+
write_pull_secret
18+
19+
# Release mirroring could be required by the subsequent steps
20+
# even if the current one will be skipped
21+
if [[ ! -z "${MIRROR_IMAGES}" && "${MIRROR_IMAGES,,}" != "false" ]]; then
22+
setup_release_mirror
23+
fi
24+
25+
# Prepare registry directory for appliance if using ISO_NO_REGISTRY
26+
if [[ ! -z "${MIRROR_IMAGES}" && "${MIRROR_IMAGES,,}" != "false" ]]; then
27+
if [[ "${AGENT_E2E_TEST_BOOT_MODE}" == "ISO_NO_REGISTRY" ]]; then
28+
echo "Preparing registry directory structure for appliance..."
29+
30+
# Create the cache directory structure expected by appliance
31+
# Appliance expects: mirror-path/cache/<version-arch> (ISO output)
32+
# Appliance will read registry data directly from mirror-path/data
33+
34+
# Extract version from release image to create cache subdirectory
35+
# Appliance creates cache dir in format: cache/<version>-<arch>
36+
VERSION=$(skopeo inspect --authfile ${PULL_SECRET_FILE} docker://${OPENSHIFT_RELEASE_IMAGE} | jq -r '.Labels["io.openshift.release"]')
37+
ARCH=$(uname -m)
38+
CACHE_SUBDIR="${VERSION}-${ARCH}"
39+
mkdir -p ${REGISTRY_DIR}/cache/${CACHE_SUBDIR}
40+
41+
# Copy YAML files and mapping.txt to registry directory so appliance can find them
42+
if [[ -d ${WORKING_DIR}/working-dir ]]; then
43+
cp -r ${WORKING_DIR}/working-dir ${REGISTRY_DIR}/
44+
fi
45+
46+
# Copy results directory containing mapping.txt
47+
for results_dir in ${WORKING_DIR}/results-*; do
48+
if [[ -d "$results_dir" ]]; then
49+
cp -r "$results_dir" ${REGISTRY_DIR}/
50+
fi
51+
done
52+
53+
echo "Registry directory prepared for appliance"
54+
exit 0
55+
fi
1956
fi
2057

2158
# To replace an image entry in the openshift release image, set <ENTRYNAME>_LOCAL_REPO so that:
@@ -34,15 +71,6 @@ fi
3471
# export ASSISTED_SERVICE_DOCKERFILE=Dockerfile.assisted-service.ocp
3572
# export ASSISTED_SERVICE_IMAGE=agent-installer-api-server
3673

37-
early_deploy_validation
38-
write_pull_secret
39-
40-
# Release mirroring could be required by the subsequent steps
41-
# even if the current one will be skipped
42-
if [[ ! -z "${MIRROR_IMAGES}" && "${MIRROR_IMAGES,,}" != "false" ]]; then
43-
setup_release_mirror
44-
fi
45-
4674
function build_local_release() {
4775
# Sanity checks
4876
if [[ -z "${MIRROR_IMAGES}" || "${MIRROR_IMAGES,,}" == "false" ]]; then

agent/06_agent_create_cluster.sh

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,23 +85,45 @@ function create_config_image() {
8585
function create_agent_iso_no_registry() {
8686
local asset_dir=${1}
8787

88-
AGENT_ISO_BUILDER_IMAGE=$(getAgentISOBuilderImage)
89-
90-
id=$(podman create --pull always --authfile "${PULL_SECRET_FILE}" "${AGENT_ISO_BUILDER_IMAGE}") && podman cp "${id}":/src "${asset_dir}" && podman rm "${id}"
91-
9288
# Update release_info.json as its needed by CI tests
9389
save_release_info ${OPENSHIFT_RELEASE_IMAGE} ${OCP_DIR}
9490

91+
# Temporarily use custom agent-iso-builder image
92+
AGENT_ISO_BUILDER_IMAGE="quay.io/rwsu1/agent-iso-builder:dev-scripts"
93+
94+
# Get agent-iso-builder source from container
95+
id=$(podman create --pull always --authfile "${PULL_SECRET_FILE}" "${AGENT_ISO_BUILDER_IMAGE}") && podman cp "${id}":/src "${asset_dir}" && podman rm "${id}"
96+
9597
# Create agent ISO without registry a.k.a. OVE ISO
9698
pushd .
9799
cd "${asset_dir}"/src
98-
# Build the ISO in the container image
99-
make build-ove-iso-container PULL_SECRET_FILE="${PULL_SECRET_FILE}" RELEASE_IMAGE_URL="${OPENSHIFT_RELEASE_IMAGE}" ARCH=${ARCH}
100-
# Retrieve ISO from container
101-
./hack/iso-from-container.sh
102-
local iso_name="agent-ove.${ARCH}.iso"
103-
echo "Moving ${iso_name} to ${asset_dir}"
104-
mv ./output-iso/${iso_name} "${asset_dir}"
100+
101+
# Prepare mirror path arguments if MIRROR_IMAGES is enabled
102+
local mirror_path_arg=""
103+
if [[ ! -z "${MIRROR_IMAGES}" && "${MIRROR_IMAGES,,}" != "false" ]]; then
104+
echo "Using pre-mirrored images from ${REGISTRY_DIR}"
105+
mirror_path_arg="--mirror-path ${REGISTRY_DIR}"
106+
fi
107+
108+
if [[ "${AGENT_OVE_BUILD_METHOD}" == "script" ]]; then
109+
# Use the legacy build-ove-image.sh script
110+
./hack/build-ove-image.sh --pull-secret-file "${PULL_SECRET_FILE}" --release-image-url "${OPENSHIFT_RELEASE_IMAGE}" --ssh-key-file "${SSH_KEY_FILE}" --dir "${asset_dir}" ${mirror_path_arg}
111+
else
112+
# Use container-based build (default)
113+
# Build the ISO in the container image
114+
# Convert mirror path argument to make variable format
115+
local mirror_args=""
116+
if [[ ! -z "${mirror_path_arg}" ]]; then
117+
mirror_args="MIRROR_PATH=${REGISTRY_DIR}"
118+
fi
119+
make build-ove-iso-container PULL_SECRET_FILE="${PULL_SECRET_FILE}" RELEASE_IMAGE_URL="${OPENSHIFT_RELEASE_IMAGE}" ARCH=${ARCH} ${mirror_args}
120+
# Retrieve ISO from container
121+
./hack/iso-from-container.sh
122+
local iso_name="agent-ove.${ARCH}.iso"
123+
echo "Moving ${iso_name} to ${asset_dir}"
124+
mv ./output-iso/${iso_name} "${asset_dir}"
125+
fi
126+
105127
rm -rf "${asset_dir}"/src
106128
popd
107129
}
@@ -639,6 +661,13 @@ case "${AGENT_E2E_TEST_BOOT_MODE}" in
639661
cleanup_diskspace_agent_iso_noregistry ${asset_dir}
640662
fi
641663

664+
# Clean up registry data to save disk space after ISO is created
665+
if [[ ! -z "${MIRROR_IMAGES}" && "${MIRROR_IMAGES,,}" != "false" ]]; then
666+
echo "Cleaning up registry data at ${REGISTRY_DIR} to save disk space"
667+
sudo rm -rf ${REGISTRY_DIR}/data
668+
echo "Registry data cleanup complete"
669+
fi
670+
642671
attach_agent_iso_no_registry master $NUM_MASTERS
643672
attach_agent_iso_no_registry worker $NUM_WORKERS
644673
attach_agent_iso_no_registry arbiter $NUM_ARBITERS

agent/common.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ export AGENT_ROOT_DEVICE_HINTS=${AGENT_ROOT_DEVICE_HINTS:-""}
1515
export AGENT_BM_HOSTS_IN_INSTALL_CONFIG=${AGENT_BM_HOSTS_IN_INSTALL_CONFIG:-"false"}
1616

1717
export AGENT_MINIMAL_ISO=${AGENT_MINIMAL_ISO:-"false"}
18+
# OVE ISO build method: "script" uses build-ove-image.sh, "container" uses Dockerfile-based build
19+
export AGENT_OVE_BUILD_METHOD=${AGENT_OVE_BUILD_METHOD:-"container"}
1820

1921
export BOND_CONFIG=${BOND_CONFIG:-"none"}
2022

0 commit comments

Comments
 (0)