From d6345103197bf19277125ac7e1aac77769cb1ae8 Mon Sep 17 00:00:00 2001 From: Kyle MacLeod Date: Mon, 28 Nov 2022 21:58:28 -0500 Subject: [PATCH] Perform remote ostree pull during local-based ostree install For Redfish-based subcloud installs which use a local ostree repo as the basis of their install, we perform a secondary ostree pull from the system controller. This will pull any ostree commits which have been applied (via patch) since the local ostree repo was created. Note that this also requires syncing of the patch metadata via /opt/patching. This step is done via the install ansible playbook. Test Plan: PASS: - Simulate a local ostree-based install during a sushy subcloud add in libvirt. Verify that a remote ostree pull retrieves any patch commits from the system controller. This is done by manipulating ostree repo contents on the system controller during the miniboot.cfg kicktart. PASS: - Prestage a subcloud from a non-patched system controller. Prestaged ostree_repo is stored on platform-backup partition. Patch the system controller. Add the prestaged subcloud. Verify that the subcloud boots and that the patched ostree commit is transferred to the subcloud during the miniboot.cfg kickstart. Partial-Bug: 1998256 Signed-off-by: Kyle MacLeod Change-Id: Iee08b40dc2b930dacbbf4df08b0f727eb945d4ba --- kickstart/files/miniboot.cfg | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/kickstart/files/miniboot.cfg b/kickstart/files/miniboot.cfg index adedd2bb..52f6c4c6 100644 --- a/kickstart/files/miniboot.cfg +++ b/kickstart/files/miniboot.cfg @@ -2040,7 +2040,11 @@ else # If ostree_repo is found at the mounted backup directory, # then set the ostree url to its location. + remote_insturl= if [ -e ${backup_mount}/ostree_repo ]; then + # Preserve remote_insturl for use in 2nd ostree pull below + remote_insturl=${insturl} + insturl="file:///${backup_mount}/ostree_repo" ilog "Setting insturl to ${insturl} to use prestaged ostree_repo" fi @@ -2073,9 +2077,34 @@ else report_failure_with_msg "ostree pull failed, rc=$rc" fi + if [ -n "${remote_insturl}" ]; then + # In this case, we've initialized our ostree repo from local disk + # store - either via prestaging or due to installing from ISO. + # We now perform an extra ostree pull from the system controller + # in order to pick up any patch commits. + ilog "ostree_repo archive pull from ${remote_insturl} for patch commits" + + # Set feed ostree remote "starlingx" to point to active controller's feed ostree repo + ilog "Replacing ostree feed remote with: ${remote_insturl} ${instbr}" + ostree --repo=${repo} remote delete ${instbr} + ostree --repo=${repo} remote add ${instbr} ${remote_insturl} ${instbr} + if grep -q noverifyssl /proc/cmdline 2>/dev/null; then + ilog "Configuring ostree for unverified SSL" + ostree config --repo=${repo} set "remote \"${instbr}\"".tls-permissive true + fi + ilog "Executing ostree pull from ${remote_insturl}:" + ilog "ostree --repo=${repo} pull --depth=-1 --mirror ${instbr}:${instbr}" + ostree --repo=${repo} pull --depth=-1 --mirror ${instbr}:${instbr} + rc=$? + if [ $rc -ne 0 ]; then + report_failure_with_msg "ostree pull failed, rc=$rc" + fi + fi + ilog "ostree log for ${repo}, branch=${instbr}:" + ostree --repo=${repo} log ${instbr} + umount ${backup_mount} umount ${PHYS_SYSROOT} - fi fi