Skip to content

Instantly share code, notes, and snippets.

@markus-k
Last active April 6, 2022 15:56
Show Gist options
  • Save markus-k/ece7665ac5dbb22ab906af81a6b3e266 to your computer and use it in GitHub Desktop.
Save markus-k/ece7665ac5dbb22ab906af81a6b3e266 to your computer and use it in GitHub Desktop.
Script to create simple cloud-init instances in libvirt
#!/bin/bash
# this is basically https://sumit-ghosh.com/articles/create-vm-using-libvirt-cloud-images-cloud-init/
# as a script
set -x
set -e
if [ $# -eq "0" ]; then
echo "Usage: $0 INSTANCE_NAME"
exit 1
fi
VCPUS=2
RAM=4096
DISK_SIZE=64G
INSTANCE_NAME=$1
IMAGES_PATH=/var/lib/libvirt/images
CLOUD_IMG=${IMAGES_PATH}/focal-server-cloudimg-amd64.img
OS_VARIANT=ubuntu20.04
CLOUD_INIT_ISO=cidata.iso
DISK_IMAGE=${IMAGES_PATH}/${INSTANCE_NAME}.img
# create cloud-init iso
mkdir -p "$INSTANCE_NAME"
pushd "$INSTANCE_NAME"
echo "instance-id: $INSTANCE_NAME" > meta-data
echo "local-hostname: $INSTANCE_NAME" >> meta-data
cp ../user-data user-data
genisoimage -output $CLOUD_INIT_ISO -V cidata -r -J user-data meta-data
popd
# create image
qemu-img create -b "${CLOUD_IMG}" -f qcow2 \
-F qcow2 "$DISK_IMAGE" $DISK_SIZE
# create vm
virt-install --name="$INSTANCE_NAME" --ram=$RAM --vcpus=$VCPUS --import \
--disk "path=$DISK_IMAGE,format=qcow2" \
--disk "path=$INSTANCE_NAME/$CLOUD_INIT_ISO,device=cdrom" \
--os-variant=$OS_VARIANT --network bridge=virbr0,model=virtio \
--graphics vnc --noautoconsole
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment