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
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
"rm -f ${HOME}/.ssh/id_rsa"
)
lxc file push ~/.ssh/id_rsa.pub "ci:${INSTANCE_NAME}/root/.ssh/authorized_keys2"
+# Some distros, eg. Rocky Linux, don't enable the use of authorized_keys2
+# by default
+lxc exec "ci:${INSTANCE_NAME}" -- bash -c 'if test -f /etc/redhat-release ; then sed -i "s#^AuthorizedKeysFile.*#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2#" /etc/ssh/sshd_config ; systemctl restart sshd ; fi'
+
# Confirm working SSH connection
if ! ssh "${INSTANCE_IP}" hostname ; then
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"