SERVER_IDS="
dd799bc6-ded0-4f20-8f24-3e5af5250fd3
46562d71-ba00-47b7-872a-cd759abd014c
5e517453-c87f-4426-b705-96ffc9afe4ce
"
function save_image() {
IMAGE_ID="${1}"
IMAGE_NAME="${2}"
echo "IMAGE_ID: ${IMAGE_ID}"
openstack image set --private ${IMAGE_ID}
echo "Save image as ${IMAGE_NAME}.qcow2 ..."
openstack image save ${IMAGE_ID} --file ${IMAGE_NAME}.qcow2
openstack image show ${IMAGE_ID} -c size -f value
ls -l ${IMAGE_NAME}.qcow2
md5sum ${IMAGE_NAME}.qcow2 > ${IMAGE_NAME}.qcow2.md5sum
openstack image show ${IMAGE_ID} -f json > ${IMAGE_NAME}.json
echo "Delete image ${IMAGE_NAME}"
openstack image delete ${IMAGE_ID}
}
for SERVER_ID in ${SERVER_IDS}; do
echo "SERVER_ID: ${SERVER_ID}"
SERVER_JSON=$(openstack server show ${SERVER_ID} -f json)
SERVER_NAME=$(echo ${SERVER_JSON} | jq -r .name | tr " " "_")
echo "SERVER_NAME: ${SERVER_NAME}"
SERVER_STATUS=$(echo ${SERVER_JSON} | jq -r .status)
echo "SERVER_STATUS: ${SERVER_STATUS}"
SERVER_IMAGE=$(echo ${SERVER_JSON} | jq -r .image)
echo "SERVER_IMAGE: ${SERVER_IMAGE}"
openstack server show ${SERVER_ID} -f json > ${SERVER_ID}.json
if [ "${SERVER_IMAGE}" != "N/A (booted from volume)" ]; then
FLAVOR_ID=$(echo ${SERVER_JSON} | jq -r .flavor | cut -d "(" -f2 | cut -d")" -f1)
FLAVOR_DISK=$(openstack flavor show ${FLAVOR_ID} -c disk -f value)
echo "FLAVOR_DISK: ${FLAVOR_DISK}"
IMAGE_NAME="${SERVER_ID}_image_$(date -I)"
echo "Create image ${IMAGE_NAME} ..."
IMAGE_ID=$(openstack server image create --wait --name ${IMAGE_NAME} ${SERVER_ID} -c id -f value)
save_image "${IMAGE_ID}" "${IMAGE_NAME}"
fi
VOLUME_IDS=$(openstack server show ${SERVER_ID} -c volumes_attached -f json | jq -r .volumes_attached[].id)
for VOLUME_ID in ${VOLUME_IDS}; do
VOLUME_NAME=$(openstack volume show ${VOLUME_ID} -c name -f value)
[ -z ${VOLUME_NAME} ] && VOLUME_NAME=${VOLUME_ID}
echo "VOLUME_NAME: ${VOLUME_NAME}"
VOLUME_SIZE=$(openstack volume show ${VOLUME_ID} -c size -f value)
echo "VOLUME_SIZE: ${VOLUME_SIZE}"
IMAGE_NAME="${VOLUME_NAME}_image_$(date -I)"
echo "Create snapshot ${IMAGE_NAME} ..."
TMP_SNAPSHOT_ID=$(openstack volume snapshot create --volume ${VOLUME_ID} ${IMAGE_NAME} -c id -f value --force)
echo "TMP_SNAPSHOT_ID: ${TMP_SNAPSHOT_ID}"
TMP_VOLUME_ID=$(openstack volume create --snapshot ${TMP_SNAPSHOT_ID} ${IMAGE_NAME} -c id -f value)
echo "TMP_VOLUME_ID: ${TMP_VOLUME_ID}"
echo "Wait for volume status available ..."
while ! [ "$(openstack volume show ${TMP_VOLUME_ID} -c status -f value)" == "available" ]; do sleep 1; done
echo "Create image ${IMAGE_NAME} ..."
IMAGE_ID=$(openstack image create --volume ${TMP_VOLUME_ID} ${IMAGE_NAME} -c image_id -f value)
echo "IMAGE_ID: ${IMAGE_ID}"
echo "Wait for volume status available"
while ! [ "$(openstack volume show ${TMP_VOLUME_ID} -c status -f value)" == "available" ]; do sleep 1; done
save_image "${IMAGE_ID}" "${IMAGE_NAME}"
# cleanup
openstack volume delete ${TMP_VOLUME_ID}
openstack volume snapshot delete ${TMP_SNAPSHOT_ID}
done
echo
doneImport image
openstack image create --disk-format qcow2 --container-format bare --file img1.qcow2 my_image