Skip to content

Instantly share code, notes, and snippets.

@cyrenity
Created June 1, 2021 10:16
Show Gist options
  • Save cyrenity/5e59bb240639ee7ee279badec3d22df1 to your computer and use it in GitHub Desktop.
Save cyrenity/5e59bb240639ee7ee279badec3d22df1 to your computer and use it in GitHub Desktop.
export VMNAME=instance01
export MAC_ADDR=$(printf '52:54:00:%02x:%02x:%02x' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)))
export INTERFACE=enp1s0
export IP_ADDR=192.168.122.101
export CONFIG_DIR=/home/bitvizor.com/.local/share/libvirt/cloudconfigs/
export IMAGES_DIR=/home/bitvizor.com/.local/share/libvirt/images/
export SSH_KEYS=ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDVtvTtRd3zOAo5bSgRR7muNdHTFeZg1RhxNkcl24W0ZfKTvLd1HWhL4LEvVjUwQY1xvPaEKiyCXIYf18feIy15KW3oBj4mqEk+YsUbTMSoV32DnMUyhDfoPKM4gOXMYRbliKr2mQ5RX6pEgm2H4mzI+kC6+f8v+/Fn6o6zOwgfo0ltbHfCH31YW1i+DIZtJ6/iWCzLJ7fDvRJW/YKH0DXOJQxaX4k9J7aGjjs8dXdJANtIgT4doa6ZpKTDh36sgBTsAlYQAnnH9DJxv71sRHSnXyzhjrgkkgkKbeG/GZy7Lr3fH/hqEc3P4DE8c7waAySNMOGThbVqx95uwNGSQa6XO3UsDxzg2NTuqmUqlOUQRAyLkteCOpAyd/8YUREriVotFKJGTIJTMo/7TnrPk5VpNQb/BQlGN12z0uQg8GkS88DlefPnDvdGpxemVBXAxtNscYfpoJzwB7H2kcfUeIrzJki929G/CI4K+A3K2i6v7dGXKgHlIbLGDCh3hgHF1a0= vasops@vasops
# Prepare primary disk image
cp /home/bitvizor.com/focal-server-cloudimg-amd64.img ${IMAGES_DIR}/${VMNAME}-disk.qcow2
qemu-img resize ${IMAGES_DIR}/${VMNAME}-disk.qcow2 20G
# Create cloud-init configuration for VM
mkdir -p ${CONFIG_DIR}/${VMNAME}
cat > ${CONFIG_DIR}/${VMNAME}/network-config <<EOF
ethernets:
$INTERFACE:
addresses:
- $IP_ADDR/24
dhcp4: false
gateway4: 192.168.122.1
match:
macaddress: $MAC_ADDR
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
set-name: $INTERFACE
version: 2
EOF
cat > ${CONFIG_DIR}/${VMNAME}/user-data <<EOF
#cloud-config
hostname: ${VMNAME}
manage_etc_hosts: true
users:
- name: vasops
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/vasops
shell: /bin/bash
lock_passwd: false
ssh_authorized_keys:
- ${SSH_KEYS}
ssh_pwauth: true
disable_root: false
chpasswd:
list: |
vasops:vasops
expire: false
EOF
touch ${CONFIG_DIR}/${VMNAME}/meta-data
# Create cloud-init disk
cloud-localds -v --network-config=${CONFIG_DIR}/${VMNAME}/network-config ${IMAGES_DIR}/${VMNAME}-seed.qcow2 ${CONFIG_DIR}/${VMNAME}/user-data ${CONFIG_DIR}/${VMNAME}/meta-data
# Launch the instance
virt-install --virt-type kvm --name ${VMNAME} \
--ram 4096 --vcpus=4 --os-type linux --os-variant ubuntu20.04 \
--disk path=${IMAGES_DIR}/${VMNAME}-disk.qcow2,device=disk \
--disk path=${IMAGES_DIR}/${VMNAME}-seed.qcow2,device=disk \
--import --network network=default,model=virtio,mac=$MAC_ADDR \
--noautoconsole --nographics
# Destroy everything
virsh destroy ${VMNAME}
virsh undefine ${VMNAME}
rm -rf ${IMAGES_DIR}/${VMNAME}-*
rm -rf ${CONFIG_DIR}/${VMNAME}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment