From 953731b0bd2fd7645114c454a10418c41733b8eb Mon Sep 17 00:00:00 2001 From: Kienan Stewart Date: Tue, 20 Feb 2024 14:31:48 -0500 Subject: [PATCH] jjb: Gently stop instances before publication Avoids potential issues with changes not being fully written to disk in teh result image. Change-Id: I0dab01038870cbc798560863de1971a3a124983a Signed-off-by: Kienan Stewart --- .../ansible/playbooks/post-imagebuild-clean.yml | 2 ++ pipelines/images/imagebuild.sh | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/automation/ansible/playbooks/post-imagebuild-clean.yml b/automation/ansible/playbooks/post-imagebuild-clean.yml index 4a352fc..d26490a 100644 --- a/automation/ansible/playbooks/post-imagebuild-clean.yml +++ b/automation/ansible/playbooks/post-imagebuild-clean.yml @@ -16,6 +16,8 @@ - ansible.builtin.command: argv: ['cloud-init', 'clean'] ignore_errors: true + - ansible.built.command: + argv: ['sync'] - ansible.builtin.shell: cmd: 'history -cw' # Some default shells don't have the `history` built-in, diff --git a/pipelines/images/imagebuild.sh b/pipelines/images/imagebuild.sh index 5a26930..45632c0 100644 --- a/pipelines/images/imagebuild.sh +++ b/pipelines/images/imagebuild.sh @@ -91,9 +91,9 @@ set +e TRIES_MAX=3 TRIES=0 while [[ "${TRIES}" -lt "${TRIES_MAX}" ]] ; do - if ! INSTANCE_NAME=$(lxc -q launch -e "${VM_ARG[@]}" -p default -p "${LXD_INSTANCE_PROFILE}" "${SOURCE_IMAGE_NAME}/${IMAGE_TYPE}") ; then + if ! INSTANCE_NAME=$(lxc -q launch "${VM_ARG[@]}" -p default -p "${LXD_INSTANCE_PROFILE}" "${SOURCE_IMAGE_NAME}/${IMAGE_TYPE}") ; then # Try from images - if ! INSTANCE_NAME=$(lxc -q launch -e "${VM_ARG[@]}" -p default -p "${LXD_INSTANCE_PROFILE}" images:"${SOURCE_IMAGE_NAME}") ; then + if ! INSTANCE_NAME=$(lxc -q launch "${VM_ARG[@]}" -p default -p "${LXD_INSTANCE_PROFILE}" images:"${SOURCE_IMAGE_NAME}") ; then TRIES=$((TRIES + 1)) echo "Failed to deployed ephemereal instance attempt ${TRIES}/${TRIES_MAX}" if [[ "${TRIES}" -lt "${TRIES_MAX}" ]] ; then @@ -111,7 +111,8 @@ INSTANCE_NAME="$(echo "${INSTANCE_NAME}" | cut -d ':' -f 2 | tr -d ' ')" set -e CLEANUP+=( - "lxc stop -f ${INSTANCE_NAME}" + "lxc delete -f ${INSTANCE_NAME}" + "lxc stop ${INSTANCE_NAME}" ) # VMs may take more time to start, wait until instance is running @@ -196,8 +197,11 @@ LANG=C ANSIBLE_STRATEGY=linear ansible-playbook \ playbooks/post-imagebuild-clean.yml \ -l "${INSTANCE_IP}" -i fake-inventory +# Graceful shutdown +lxc stop "${INSTANCE_NAME}" + # Publish -if FINGERPRINT=$(lxc publish "${INSTANCE_NAME}" -f 2>&1 | grep -E -o '[A-Fa-f0-9]{64}') ; then +if FINGERPRINT=$(lxc publish "${INSTANCE_NAME}" 2>&1 | grep -E -o '[A-Fa-f0-9]{64}') ; then echo "Published instance with fingerprint '${FINGERPRINT}'" else fail 1 "No fingerprint for published instance" -- 2.39.5